Linux 内核优化
1、禁用swap
修改sysctl.conf ,设置vm.swappiness=0
or 使用swapoff swapon 命令打开关闭交换分区
2、增大系统可以打开的文件描述符 refer: http://blog.csdn.net/superchanon/article/details/13303705
单个进程可以打开的文件句柄数默认为1024,修改需重新编译linux
nginx采用epoll没有此限制
查看: cat /proc/sys/fs/file-max
修改:
临时性
# echo 1000000 >
/proc/sys/fs/file-max
永久性:在/etc/sysctl.conf中设置
fs.file-max =
100000
3、进程最大打开文件描述符数
查看:ulimit -n or ulimit -Sn 查看的是soft limit,ulimit -Hn 查看hard limit
设置:ulimit -n 132320 同时设置soft and hard limt,单独设置soft limit : ulimit -Sn 2323 不能超过hard limit
软限制可以在程序的进程中自行改变(突破限制),而硬限制则不行(除非程序进程有root权限
4、查看当前系统使用的打开文件描述符数
[root@localhost bin]# cat
/proc/sys/fs/file-nr
5664 0
186405
其中第一个数表示当前系统已分配使用的打开文件描述符数,第二个数为分配后已释放的(目前已不再使用),第三个数等于file-max。
5、tcp 参数优化
net.ipv4.tcp_syn_retries = 1 默认5,180s左右
net.ipv4.tcp_synack_retries = 1 默认5
net.ipv4.tcp_keepalive_time = 600 默认7200s,
TCP发送keepalive探测消息的间隔时间(秒),用于确认TCP连接是否有效。设置小点可以更快清除无效连接
net.ipv4.tcp_keepalive_probes
= 3 默认9,如果对方不应答,探测包的发送次数
net.ipv4.tcp_keepalive_intvl
=15 默认75s,如果对方不应答,探测包的发送消息的间隔时间(秒)。默认值为75秒。
net.ipv4.tcp_retries2 = 5
net.ipv4.tcp_fin_timeout = 2
默认60
,本端断开的socket连接,TCP保持在FIN-WAIT-2状态的时间。对方可能会断开连接或一直不结束连接或不可预料的进程死亡。
net.ipv4.tcp_max_tw_buckets
= 36000, 系统在同时所处理的最大 timewait sockets 数目。如果超过此数的话﹐time-wait socket
会被立即砍除并且显示警告信息。之所以要设定这个限制﹐纯粹为了抵御那些简单的 DoS
攻击﹐不过﹐如果网络条件需要比默认值更多﹐则可以提高它(或许还要增加内存)。
net.ipv4.tcp_tw_recycle = 1
打开快速 TIME-WAIT sockets 回收
net.ipv4.tcp_tw_reuse =
1 表示是否允许重新应用处于TIME-WAIT状态的socket用于新的TCP连接
TIMEWARIT 的超时时间无法配置,必须重新编译内核
net.ipv4.tcp_max_orphans =
32768
net.ipv4.tcp_syncookies = 1
在服务器资源(并非单指端口资源,拒绝服务有很多种资源不足的情况)不足的情况下,尽量不要拒绝TCP的syn(连接)请求,尽量把syn请求缓存起来,留着过会儿有能力的时候处理这些TCP的连接请求
net.ipv4.tcp_max_syn_backlog
= 16384
net.ipv4.tcp_wmem = 8192 131072 16777216
net.ipv4.tcp_rmem = 32768
131072 16777216
net.ipv4.tcp_mem = 786432 1048576
1572864
net.ipv4.ip_local_port_range = 1024
65000
net.ipv4.ip_conntrack_max =
65536
net.ipv4.netfilter.ip_conntrack_max=65536
net.ipv4.netfilter.ip_conntrack_tcp_timeout_established=180
net.core.somaxconn
= 16384
net.core.netdev_max_backlog = 16384