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,很难找到了吧?

 

别在原地死钻空子,或许这里根本没有宝藏。

 

希望本文对你有用. ^_^

posted @ 2009-03-26 15:14  MK2  阅读(1016)  评论(0编辑  收藏  举报