服务器大量tcp close_wait

线上碰到服务器 大量tcp连接处于close_wait状态,tomcat处于假死状态,即tomca在运行,但不能访问。因为tcp连接耗尽了。

查询tcp连接数和状态:netstat -an|awk '/^tcp/{++S[$NF]}END{for (a in S)print a,S[a]}'   

查询端口监听的tcp连接 netstat -anp |grep 8080

 按tcp协议来说,客户端发送关闭连接消息,服务端会进入close_wait状态,服务端处理完后会自动进入last_ack状态,为什么服务端没进入?

这种情况是客户端先发起了关闭,服务端被动关闭,问题应该在服务端。

 参考网上资料服务器出现大量close_wait,我们来说说到底是怎么回事?(以tomcat为例) - 三国梦回 - 博客园

一次服务端大量CLOSE_WAIT问题的解决_Hello World-CSDN博客

 以上两个案例,服务端因为一些错误导致接口响应很慢、或者被堵塞住,导致客户端连接超时,所以客户端开始关闭,但服务端一直没处理完,所以没有进入到last_ack状态。

最后我这里排查出是websocket 连接400,一直没能连上,服务端没关闭tcp。但客户端不停的在重新连接,导致tcp很多。

总结:服务端阻塞问题,服务端太耗时、服务端程序阻塞,导致客户端连接超时请求断开连接,但服务端程序还在执行、还在处理资源无法进入lastack状态。比如以上网上案例,服务端等待数据库连接以致阻塞、服务端等待其他io接口以致阻塞。

排查,先看客户端操作、服务端日志,看哪块代码引发closewait,再去排查是否阻塞或没关闭资源。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值