记CLOSE_WAIT过多造成应用假死

admin 2021年1月19日20:33:57评论191 views字数 792阅读2分38秒阅读模式
摘要

tcp 最近应用服务器在大流量情况下经常出现假死现象,后台log报 too many open files 的错误,也可以加大linux系统的文件打开数是可以解决部分问题,但是时间长了同样出问题,通过查询网络连接发现是tcp连接不关闭造成的。 输入命令

tcp

最近应用服务器在大流量情况下经常出现假死现象,后台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连接

来源:http://www.safe6.cn/

本文由 safe6 创作,著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

记CLOSE_WAIT过多造成应用假死

本站的所有程序和文章,仅限用于学习和研究目的;不得用于商业或者非法用途,否则,一切后果请用户自负!! 最后编辑时间为: 2020-05-12

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年1月19日20:33:57
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   记CLOSE_WAIT过多造成应用假死https://cn-sec.com/archives/247633.html

发表评论

匿名网友 填写信息