tcp连接close_wite 过多

今天冯同学遇到个问题,tcp连接的close_wite过多。

解决办法:

(1)修改文件描述符

(2)修改内核参数

(3)需要重启网络(不重启的话上面修改的可能会不起作用)

所有文章都没有要重启网络的问题,这也是刚才告诉我的。

 

 

给我的一篇参考文章:

http://blog.sina.com.cn/s/blog_4c6b0c8e01011mmq.html

下面是文章内容:有删节。

转发自【http://blog.greycode.cn/archives/?article-108.html】 作者: steven

(这个链接已经失效了,没找到原作者)
最近web服务器在大流量情况下经常出现假死现象,后台log报 too many open files 的错误,加大linux系统的文件打开数是可以解决部分问题,但是时间长了同样出问题,通过查询网络连接发现是tcp连接不关闭造成的。如下:

netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

LAST_ACK 1
SYN_RECV 15
CLOSE_WAIT 7729
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.如果probe 9次(每次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连接。
 

 

转载于:https://blog.51cto.com/omgzz/1123464


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部