Spring Boot应用假死问题如何通过实战进行诊断?

2026-06-10 13:270阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计720个文字,预计阅读时间需要3分钟。

Spring Boot应用假死问题如何通过实战进行诊断?

这两天气遇到了一个服务假死的疑问,现象就是服务不再接收任何请求,客户端会抛出Broken Pipe错误。检查系统状态,执行了top命令,发现CPU和内存占用都不高。但通过命令netstat -n | awk '/tcp/',发现了一些异常。

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

检查系统状态

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

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

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

检查JVM情况

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

jstack <pid> > /tmp/thread.hump

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

阅读全文

本文共计720个文字,预计阅读时间需要3分钟。

Spring Boot应用假死问题如何通过实战进行诊断?

这两天气遇到了一个服务假死的疑问,现象就是服务不再接收任何请求,客户端会抛出Broken Pipe错误。检查系统状态,执行了top命令,发现CPU和内存占用都不高。但通过命令netstat -n | awk '/tcp/',发现了一些异常。

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

检查系统状态

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

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

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

检查JVM情况

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

jstack <pid> > /tmp/thread.hump

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

阅读全文