在不重新编译内核的情况下,搜集并测试了调整linux参数后,得到的nginx相应的一些结果
1)Atime:
这是系统用来定义在上次读取文件时,是否需要记录时间的信息。
如果将记录取消,我们可以在/etc/fstab中修改
LABEL=/home /home ext2 noatime 1 2
然后运行 “mount -a”才能使更改生效
在不记录时间的时候,nginx响应的TPS有一些提高
2)ulimit 命令可以显示linux系统中资源的软件限制
-c size: 设置core文件的最大file大小 单位blocks
-d size: 设置segment的最大大小 单位kbytes
-f size: 被创建文件的最大大小 单位blocks
-l size: 被每个进程锁起来的最大内存大小 单位kbytes
-m size: 每个进程的最大内存使用率 单位kbytes
-n size: 最大打开文件数 单位N
-p size: 管道缓冲区的最大值 单位kbytes
-s size: stack的最大值 单位kbytes
-t size: cpu使用率的最大值 单位Seconds
-v size: 最大虚拟内存使用 单位kbytes
其中打开文件数,会影响到nginx的性能,可以适当调高
下面是ulimit -n 1024和-n 204800的对比
ulimit -s不应该设置过大,如果过大的话会导致TPS的下降
***NOTE ulimit -*只是能够更改运行终端的软限制,如果想要长期更改,可以通过更改脚本:
可以在/etc/security/limit.conf中设置
其中,
hard 表示系统中所能设置的最大值
soft表示当前系统生效的设置值
可以针对某个用户进行限制:nginx hard nofile 102400
针对某个组进行限制: @nginx soft nofile 102400
针对所有用户进行限制: * soft nofile 102400
resource:
core - 限制内核文件的大小
date - 最大数据大小
fsize - 最大文件大小
memlock - 最大锁定内存地址空间
nofile - 打开文件的最大数目
rss - 最大持久设置大小
stack - 最大栈大小
cpu - 以分钟为单位的最多 CPU 时间
noproc - 进程的最大数目
as - 地址空间限制
maxlogins - 此用户允许登录的最大数目
要使 limits.conf 文件配置生效,必须要确保 pam_limits.so 文件被加入到启动文件中。查看 /etc/pam.d/login 文件中有:
session required /lib/security/pam_limits.so
3)TCP/IP参数调整
这些参数的调整可以在/etc/sysctl.conf中配置
net.core.netdev_max_backlog 能够发给对列的最大数据包,这个选项会在core进程的速度小于网速的时候起作用。建议值是3000
net.ipv4.tcp_max_tw_recycle 用来开启timewait快速循环,建议值是0
net.ipv4.tcp_tw_reuse 启动time-wait socket的再利用,默认的值是0
net.ipv4.tcp_syncookies 启动SYN cookie, 当SYN对列是空的时候,使用cookie
net.ipv4.tcp_fin_timeout 等待fin包的超时时间,这将对处理大量并发连接很有用处
net.ipv4.tcp_keepalive_time keepalive被设置后,默认值是1800
net.ipv4.tcp_max_syn_backlog 增加TCP SYN对列
net.core.rmem_default
net.core.wmem_default system的socket缓冲区设置
net.ipv4.tcp_rmem
net.ipv4.tcp_wmem TCP send/rec缓冲区设置
经过测试,有些结果可以参考:
1)对于net.core.netdev_max_backlog,最好不要设置太大,建议值在3000 ~ 5000
5000和8000的对比:
2)Reuse最好设置为1
3)如果硬件环境不是问题的话,请将tcp_max_syn_backlog设置成比较小的值