解决webserver tcp连接大量CLOSE_WAIT 问题
作者:互联网
netstat -n | awk '/^tcp/ {++S[$NF]} END{for(a in S) print a, S[a]}'
LAST_ACK 1
SYN_RECV 15
CLOSE_WAIT7729
ESTABLISHED 471
FIN_WAIT1 3
FIN_WAIT2 52
SYN_SENT 1
TIME_WAIT 725
从结果可以看到有大量的连接处于CLOSE_WAIT状态。
要解决这个问题的可以修改系统的参数,系统默认超时时间的是7200秒,也就是2小时。
默认如下:
tcp_keepalive_time = 7200 seconds (2 hours)
tcp_keepalive_probes = 9
tcp_keepalive_intvl = 75 seconds
意思是如果某个TCP连接在idle 2个小时后,内核才发起probe.如果probe9次(每次75秒)不成功,内核才彻底放弃,认为该连接已失效
修改后
sysctl -w net.ipv4.tcp_keepalive_time=30
sysctl -w net.ipv4.tcp_keepalive_probes=2
sysctl -w net.ipv4.tcp_keepalive_intvl=2
经过这个修改后,服务器会在短时间里回收没有关闭的tcp连接。
标签:sysctl,tcp,webserver,ipv4,CLOSE,net,keepalive 来源: https://blog.csdn.net/Leon_Jinhai_Sun/article/details/118916337