Linux前端WEB服务器存在大量timeout连接处理方法

统计在一台前端机上高峰时间TCP连接的情况,统计命令:
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

结果:


[root@pc ~]#netstat -an| awk '/^tcp/ {++S[$NF]} END {for (a in S) print a,S[a]}'

TIME_WAIT 6661

FIN_WAIT2 60

ESTABLISHED 271

SYN_RECV 9

LISTEN 21


除了ESTABLISHED可以看到连接数比较多的几个状态是FIN_WAIT1, TIME_WAIT, CLOSE_WAIT, SYN_RECVLAST_ACK下面的文章就这几个状态的产生条件、对系统的影响以及处理方式进行简单描述。


 

发现存在大量TIME_WAIT状态的连接
tcp        0      0 127.0.0.1:3306             127.0.0.1:41378            TIME_WAIT
tcp        0      0 127.0.0.1:3306             127.0.0.1:41379            TIME_WAIT
tcp        0      0 127.0.0.1:3306             127.0.0.1:39352            TIME_WAIT
tcp        0      0 127.0.0.1:3306             127.0.0.1:39350            TIME_WAIT
tcp        0      0 127.0.0.1:3306             127.0.0.1:35763            TIME_WAIT
tcp        0      0 127.0.0.1:3306             127.0.0.1:39372            TIME_WAIT
tcp        0      0 127.0.0.1:3306             127.0.0.1:39373            TIME_WAIT
tcp        0      0 127.0.0.1:3306             127.0.0.1:41176            TIME_WAIT
 
 
 
通过调整内核参数解决
vi /etc/sysctl.conf


编辑文件加入以下内容
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30

 
然后执行/sbin/sysctl -p让参数生效。


 

 
net.ipv4.tcp_syncookies = 1表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;
net.ipv4.tcp_tw_reuse = 1表示开启重用。允许将TIME-WAITsockets重新用于新的TCP连接,默认为0,表示关闭;
net.ipv4.tcp_tw_recycle = 1表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。
net.ipv4.tcp_fin_timeout修改系統默认的TIMEOUT时间
 
修改之后再用命令查看TIME_WAIT连接数
netstat -ae|grep “TIME_WAIT” |wc –l

 
发现大量的TIME_WAIT 已不存在mysql进程的占用率很快就降下来的网站访问正常。

 

[root@pc~]# netstat -an| awk '/^tcp/ {++S[$NF]} END {for (a in S) print a,S[a]}'

TIME_WAIT 96

FIN_WAIT11

ESTABLISHED259

FIN_WAIT258

SYN_RECV1

LISTEN21



分割线
感谢打赏
江西数库信息技术有限公司
YWSOS.COM 平台代运维解决方案
 评论
 发表评论
姓   名:

Powered by AKCMS