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 使上述选项生效。