
正文
临时解决系统中大量的TIME_WAIT连接
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
今天,偶然间发现后台服务与数据库之间有大量的TIME_WAIT的连接:
[root@localhost logs]# netstat -an | grep TIME_WAIT
tcp a.a.a.a: b.b.b.b: TIME_WAIT
tcp a.a.a.a: c.c.c.c: TIME_WAIT
tcp a.a.a.a: b.b.b.b: TIME_WAIT
tcp a.a.a.a: b.b.b.b: TIME_WAIT
tcp a.a.a.a: b.b.b.b: TIME_WAIT
tcp a.a.a.a: b.b.b.b: TIME_WAIT
tcp a.a.a.a: b.b.b.b: TIME_WAIT
tcp a.a.a.a: b.b.b.b: TIME_WAIT
tcp a.a.a.a: b.b.b.b: TIME_WAIT
tcp a.a.a.a: b.b.b.b: TIME_WAIT
tcp a.a.a.a: b.b.b.b: TIME_WAIT
tcp a.a.a.a: b.b.b.b: TIME_WAIT
tcp a.a.a.a: b.b.b.b: TIME_WAIT
tcp a.a.a.a: b.b.b.b: TIME_WAIT
tcp a.a.a.a: b.b.b.b: TIME_WAIT
tcp a.a.a.a: b.b.b.b: TIME_WAIT
tcp a.a.a.a: b.b.b.b: TIME_WAIT
tcp a.a.a.a: b.b.b.b: TIME_WAIT
tcp a.a.a.a: b.b.b.b: TIME_WAIT
tcp a.a.a.a: b.b.b.b: TIME_WAIT
tcp a.a.a.a: b.b.b.b: TIME_WAIT
tcp a.a.a.a: b.b.b.b: 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-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。
net.ipv4.tcp_fin_timeout 修改系統默认的 TIMEOUT 时间
修改后,再次查看:
[root@rj- logs]# netstat -an | grep
tcp a.a.a.a: b.b.b.b: ESTABLISHED
tcp a.a.a.a: b.b.b.b: ESTABLISHED
tcp a.a.a.a: b.b.b.b: ESTABLISHED
tcp a.a.a.a: b.b.b.b: ESTABLISHED
tcp a.a.a.a: b.b.b.b: ESTABLISHED
tcp a.a.a.a: b.b.b.b: ESTABLISHED
tcp a.a.a.a: b.b.b.b: ESTABLISHED
发现之间到数据库的TIME_WAIT连接不存在了。
PS:尽管可以解决TIME_WAIT问题,但是这里建议还是需要找到产生TIME_WAIT的本质原因,比如应用系统中哪里忘记调用close方法等。








