Linux系统消除TIME_WAIT状态的TCP连接

Linux系统下,TCP连接断开后,会以TIME_WAIT状态保留一定的时间,然后才会释放端口。当并发请求过多的时候,就会产生大量的TIME_WAIT状态的连接。无法及时断开的话,会占用大量的端口资源和服务器资源。

要优化TCP的内核参数,以便系统及时将TIME_WAIT状态的端口清理掉。

vi /etc/sysctl.conf 增加如下内容:

#开启SYN Cookies。
#当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击
#默认为0,表示关闭
net.ipv4.tcp_syncookies = 1   

#开启重用。
#允许将TIME-WAIT sockets重新用于新的TCP连接
#默认为0,表示关闭
net.ipv4.tcp_tw_reuse = 1    

#修改系统默认的 TIMEOUT 时间
net.ipv4.tcp_fin_timeout = 30    

#设置系统同时保持TIME_WAIT套接字的最大数量
#如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印警告信息。
net.ipv4.tcp_max_tw_buckets = 5000

sysctl -p 使上述选项生效。

发表评论