有些时候我们在服务器上发现大量TIME-WAIT连接,多达上万,通过修改内核参数使系统能够快速回收time-wait {此文章只作为自己使用,请勿喷}
查看TCP连接情况:
[root@centos ~]# netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
LAST_ACK 56
SYN_RECV 77
ESTABLISHED 11213
FIN_WAIT1 4013
FIN_WAIT2 1638
CLOSING 3
TIME_WAIT 12261
修改内核参数,快速回收time_wait sockets:
[root@centos ~]# echo "net.ipv4.tcp_tw_reuse = 1" >> /etc/sysctl.conf
# 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
[root@centos ~]# echo "net.ipv4.tcp_tw_recycle = 1" >> /etc/sysctl.conf
# 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。
[root@centos ~]# sysctl -p
修改完成后再看TCP连接状况,time-wait连接明显减少,感觉访问Apache都快了很多。
[root@centos ~]# netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
LAST_ACK 26
SYN_RECV 225
ESTABLISHED 9228
FIN_WAIT1 4002
FIN_WAIT2 611
CLOSING 2
TIME_WAIT 415