分类: Linux
CentOS下TIME_WAIT过多-问题处理方法

TIME_WAIT状态原理
当客户端主动关闭连接时,会发送最后一个ack,然后会进入TIME_WAIT状态,再停留2个MSL时间(约1-4分钟),进入CLOSED状态。
TCP三次握手四次挥手.png
CentOS6/7.x默认没有对系统参数进行设置,当大量TIME_WAIT产生的时候会影响系统性能,
统计TIME_WAIT状态数量

netstat -ano | grep TIME_WAIT | wc -l

查看系统当前连接状态:

netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
TIME_WAIT 352
ESTABLISHED 900
CLOSING 58

解决方法如下:
修改内核配置vim /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-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
net.ipv4.tcp_tw_recycle = 1  表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。
net.ipv4.tcp_fin_timeout  修改系統默认的 TIMEOUT 时间


相关博文:

发表新评论