Spring Boot应用假死问题如何通过实战进行诊断?
- 内容介绍
- 文章标签
- 相关推荐
本文共计720个文字,预计阅读时间需要3分钟。
这两天气遇到了一个服务假死的疑问,现象就是服务不再接收任何请求,客户端会抛出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分钟。
这两天气遇到了一个服务假死的疑问,现象就是服务不再接收任何请求,客户端会抛出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状态。

