Linux过多time_wait的解决方法?如何快速回收time_wait端口?

CentOS Linux 使用netstat -anp|grep :80 时发现很多time_wait,我们可以通过修改一些内核参数来调整:

vi /etc/sysctl.conf

1、编辑文件,加入以下内容:

net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_timestamps = 1
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_fin_timeout = 5

而后命令行执行 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,表示关闭。生产环境建议不要开启,原因在客户假如是nat访问,那么timestamps不一致,会导致时间戳错乱,nat客户无法访问,这就是为什么开启后会有大量异常或突然断线的用户。

net.ipv4.tcp_fin_timeout 修改系統默认的TIMEOUT时间

2、修改之后,再用命令查看TIME_WAIT连接数   

netstat -ant | grep “TIME_WAIT” | wc –l