操作系统

升级CentOS6.5内核,开启Nginx的fastopen和reuseport特性

前面,张戈博客在折腾Nginx的SSL优化时,注意到前人在Nginx的listen配置中,添加了 fastopen=3 reuseport 这2个参数。 于是脑补了下,原来是启用Nginx对TCP_FASTOPEN和TCP_SO_REUSEPORT新特性的支持,至于有什么好处,请自行脑补下-->传送门 一、必要环境 当我依葫芦画瓢也添加这2个参数时,报错了: 继续脑补了下,发现系统必须支持 TCP_FASTOPEN和TCP_SO_REUSEPORT,然后重新编译Nginx加入如下参数: TCP_SO_REUSEPORT特性在kernel-2.6.32-431.29.2及kernel-3.9被启用,CentOS 6用户可以通过更新内核到2.6.32-431或更高版本来支持这项特性。 这个非常简单,直接yum -y update就行了。 关于TCP_FASTOPEN特性在kernel-3.6被客户端支持,在kernel-3.7被服务端支持,也就是说使用TCP_FASTOPEN需要CentOS 6更新内核至3.7或更高版本,以便支持这项特性。 ——摘自kn007的个人博客 二、升级内核 1、方式选择 看了下前人的分享,Centos内核升级一般有2种方式:编译安装或利用EPEL的yum源在线升级 在我看来,下载源码编译安装,不但步骤繁琐,而且容易出错,简直是小白的克星,而yum在线升级不易出错且步骤简单,简直是懒人必选良方,因此这里就只分享yum在升级方案,如果不是centos,就只能自己去找下源码编译的教程了。 在yum的ELRepo源中,有 mainline(3.13.1)、 long- term(3.10.28)这2个内核版本,考虑到long-term更稳定,会长期更新,所以选择这个版本。 2、导入public key 3、安装ELRepo到CentOS-6.5中 4、安装 kernel-lt(lt=long-term) Ps:如果是安装kernel-ml(ml=mainline版本),则把上述代码中的 kernel-lt 改为 kernel-ml。 5、确认Grub引导顺序 一般来说,新安装的内核映像会位于第一位,所以只要检查grub.conf中的default值是否指向新装内核即可,比如我的系统: 6、启用特性 编辑 /etc/sysctl.conf ,插入  net.ipv4.tcp_fastopen = 3,执行如下命令即可: 搞定一切之后,我们重启系统完成此次内核升级。 ——以上参考自 《使用yum快速升级CentOS 6.5内核到 3.10.28 | 原作者:健富的博客》 三、重新编译 接下来,我们需要重新编译我们的Nginx或Tengine,新增 --with-cc-opt=-DTCP_FASTOPEN=23 1、先查看当前Nginx的编译参数: 2、新增开启FASTOPEN参数,重新编译Nginx参数为: Ps:就是在原有的参数上新增  --with-cc-opt=-DTCP_FASTOPEN=23 ,重新编译前面已经分享过具体操作,这里就不赘述了,不会的朋友请参考:Nginx在线服务状态下平滑升级或新增模块的详细操作记录 3、重新编译,修改Nginx的listen配置: 编辑网站的配置文件,比如zhang.ge.conf,找到listen,然后再结尾分号前面新增 fastopen=3 reuseport参数,比如: 如果使用的是Tengine,这个配置就会报错: 最后了解到,Tengine关于reuserport的配置并不是在Listen,而是放到 events 模块。 所以,如果是Tengine,那么编辑nginx.conf主配置文件,找到events模块,如下新增 reuse_port on; 参数: 然后,在网站的listen处新增 fastopen=3 : 最后,reload重载Nginx即可,这样就不会报错了。 四、其他记录 升级内核,并启用了Nginx新特性之后,并没有进行深入的压力测试,所以本文无法给出优化后的各项性能数据,也不知道具体有多少提升,感兴趣的朋友可以自己开启,然后压测看看。 不过,升级内核后,系统多了200+rcuos和rcuob进程: 实际查看,也并没有占用系统内存或其他资源,看了一些老外论坛相关说明,也没得出一个所以然来,所以先视而不见吧!
阅读全文
操作系统

Linux系统最大文件打开数优化,解决Too many open files报错

这是一个Linux系统常见的故障,网络上也能轻易的找到解决办法,我也只是在工作中遇到了这个问题,所以在博客记录下,以备不时之需。 一、报错截图: 图为resin的报错日志,很明显提示了Too many open files:   二、临时解决 临时的解决办法很简单,先执行ulimit -n 65535,然后重启resin即可。 Ps:请注意启动环境是否生效:切换到resin的启动身份,执行 ulimit -n  查看当前的最大文件打开数是否已优化。 三、永久生效 第①种做法:可讲ulimit -n 65535 添加到 /etc/profile 的最后即可; 第②种做法:修改/etc/security/limits.conf文件,在最后添加以下内容即可: 或者直接执行如下代码亦可: 使用第①种,登陆普通账号的时候,会报无权限错误,所以推荐使用第②种方法。 最后啰嗦下,不管使用哪一种方法,修改生效后,需要重启应用才行,否则程序将延续使用旧的环境设置。
阅读全文
操作系统

Linux优化方法收集与整理

之前一直有博主要求整理下VPS主机优化方法,那么如果你是VPS主机(Linux),可以尝试一下了,尤其是linux系统的内核参数优化。 一、增加SWAP分区 VPS(Virtual Private Server 虚拟专用服务器)技术,将一部服务器分割成多个虚拟专享服务器的优质服务。每个VPS都可分配独立公网IP地址、独立操作系统、独立超大空间、独立内存、独立执行程序和独立系统配置等。 下面是配置过程中的一些笔记: VPS只有一个根分区,没有swap交换分区。VPS内存不大,于是,我为其增加了一个swap交换文件。 1、进入一个目录 cd /var/ 2、获取256M的文件块: dd if=/dev/zero of=swapfile bs=1024 count=262144 3、创建swap文件 /sbin/mkswap swapfile 4、激活swap文件 /sbin/swapon swapfile 5、查看一下swap是否正确: /sbin/swapon -s 6、加到fstab文件中让系统引导时自动启动 vi /etc/fstab 在末尾增加以下内容: /var/swapfile swap swap defaults 0 0 Ps:这个方法在玛思阁以前的文章同样整理过,详见:给已安装的Linux新增Swap交换分区。 -------------------------------------------------------------------------------- 二、修改Linux系统时区 系统默认为美国东部时间,修改Linux时区为东八区 cp -f /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 以上摘自:http://www.jb51.net/article/16732.htm 三、Linux内核参数优化 Linux内核参数优化可以使用 sysctl 命令完成,但是命令只能临时生效,若要永久保留配置,我们就得编辑sysctl.conf这个文件了。先附上sysctl.conf详细参数说明 sysctl.conf 文件中参数设置及参考推荐值 需要优化的朋友,可以参考上面的参数说明,并根据服务器实际负载来定制你的sysctl.conf文件,下面贴上一个针对nginx内核参数优化的例子,仅供参考(待补充): 将以上代码添加到sysctl.conf文件的最后,然后执行/sbin/sysctl -p 即可生效。 三、关闭多余tty,释放内存 linux默认会启动6个TTY控制台,都需要常驻占用内存(1tty占用4M多的样子),事实上没必要需要使用这么多tty,个人vps,仅需1~2个tty即可。 Centos5.* 设置tty数量: ①、编辑 /etc/inittab,找到 tty 改成 tty ②、编辑 /etc/sysconfig/init,同样将tty 改成 tty 重启系统即可生效(建议先不重启,等后续操作完成一起重启即可); CentOS 6.* 设置tty数量: CentOS 6.0 开始 TTY 的配置由 /etc/inittab 更改为 /etc/init/start-ttys.conf,所以上面的第①步变为: ①、编辑 /etc/init/start-ttys.conf,找到 tty 改成 tty ②同上编辑即可 四、关闭ipv6 ipv6一般都用不到,完全关闭即可。 编辑 /etc/modprobe.d/dist.conf 文件,在最后追加: alias net-pf-10 off alias ipv6 off 然后重启系统即可(某些发行版可能是/etc/modprobe.conf文件)。 五、关闭多余启动项 执行  chkconfig --list...
阅读全文