SpringBoot线上服务假死:非资源耗尽的故障排查

需积分: 0 0 下载量 70 浏览量 更新于2024-08-03 收藏 707KB PDF 举报
"本文档探讨了SpringBoot线上服务在CPU和内存正常的情况下突然假死的问题,针对常见的服务挂掉情况,如CPU不足、内存溢出或GC频繁,提供了深入剖析和解决方案。文章以B站713事故中的"0"作为启示,强调在排查时需关注集群环境下的服务一致性,并介绍了排查过程中的关键步骤,如检查线程状态、异常线程堆栈、内存占用情况以及使用工具如`jstack`、`jmap`和MAT进行分析。 首先,作者强调了在遇到服务无明显错误日志,但CPU和内存表现正常的假死现象时,不能忽视常规排查。这包括通过`top`或`ps`命令检查进程线程,查看异常线程ID,以及使用`jstack`获取堆栈信息来定位可能的循环递归或数据库慢查询等问题。 接下来,文档详细介绍了MAT工具的使用,尤其是Histogram视图,它帮助分析内存分配情况,区分ShallowSize(对象自身占用)和Retained Size(对象及其所有引用占用),以便找出内存泄漏的可能源头。LeakSuspects报表则以图形方式直观地展示了内存泄漏嫌疑的分布,有助于快速定位到代码层面的内存泄漏点。 最后,针对此次具体的问题排查,由于服务健康监测显示无响应且资源使用正常,作者建议直接查看堆栈信息以了解线程活动,进一步缩小问题范围。这表明在面对复杂的技术问题时,细致的分析和正确的工具运用是解决问题的关键。 本文提供了一套完整的线上SpringBoot服务假死排查流程,强调了在非典型情况下识别和解决问题的重要性,对于开发人员和运维人员来说,是一份实用的故障排除指南。"