记录一次Spring Boot假死诊断

本文记录了一次Spring Boot服务假死的诊断过程,表现为服务不响应请求,出现大量CLOSEWAIT端口占用。通过检查系统状态和JVM,发现可能由频繁Full GC引起,原因是大量对象新建并逃逸到老年代。解决方案是对MaxNewSize进行扩容,减少FGC,最终服务恢复正常。虽然未找到根本原因,但强调了健康检查的重要性。
摘要由CSDN通过智能技术生成

转载自本人博客

原文地址:https://www.deanwangpro.com/2019/07/28/zombie-thread-trouble-shooting

这两天遇到一个服务假死的问题,具体现象就是服务不再接收任何请求,客户端会抛出Broken Pipe。

检查系统状态

执行top,发现CPU和内存占用都不高,但是通过命令

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

发现有大量的CLOSEWAIT端口占用,继续调用该服务的api,等待超时之后发现CLOSEWAIT的数量也没有上升,也就是说服务几乎完全僵死。

检查JVM情况

怀疑可能是线程有死锁,决定先dump一下线程情况,执行

jstack <pid> > /tmp/thread.hump

发现tomcat线程基本也正常,都是parking状态。

Thread

这就比较奇怪了,继续想是不是GC导致了STW,使用jstat查看垃圾回收情况

app@server:/tmp$ jstat -gcutil 1 2000 10
  S0     S1     E      O      M     CCS   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值