Server Tips: 很多TIME_WAIT?
假如你的服务器很慢,而且经常无法连接,很可能你遇上了我最近的烦恼.
试着执行:
$ netstat -nta|awk '/^tcp/{++S[$NF]} END {for(a in S) print a,S[a]}'
如果结果类似:
LAST_ACK 14
SYN_RECV 348
ESTABLISHED 70
FIN_WAIT1 229
FIN_WAIT2 30
CLOSING 33
TIME_WAIT 18122
对了,就是TIME_WAIT状态太多!!!
无论你怎么配置你的服务器,怎么修改你的程序,怎么优化你的代码,TIME_WAIT同样是那么多。
搜索到很多文章说修改系统配置:
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_tw_recycle=1
虽然TIME_WAIT看起来是少了,是的,是看起来。实际这样 设置后,反而将原来的问题隐藏了,TIME_WAIT少了...
没办法了吧,TIME_WAIT少了,服务器依然很慢,依然无法连接.
我的经验教训,根本不是服务器端的问题,是客户端,客户端没有关闭连接,又或者没像你期待那样被关闭了。
重新看看客户端关闭连接的那块代码吧,做完整测试,确认真的关闭后再回来看看TIME_WAIT,很难找到了吧?
别在原地死钻空子,或许这里根本没有宝藏。
希望本文对你有用. ^_^