故障现象: 应用隔2-3天就回导致一次CPU飙到600%+(容器,宿主8核),随后宕机。
排查过程:
首先明确CPU飙升原因
第一步: top -Hp 查看占用CPU进程
发现13~20线程占用大量CPU资源第二步: jstack 查看实际占用cpu的进程(与top命令中线程关系nid(hex)=pid(dec))
发现CPU占用方均为GC线程。
第三步: jstat -gcutil 查看gc执行情况,发现
- Old区占用达100%
- 在频繁的执行Full GC操作
- 每次Full GC操作几乎释放不出Old区空间
- 确认代码中的确没有System.GC()显式操作
结合此时old区占用已经达到99.9%,基本可以确定是内存占满导致频繁的FullGC,CPU高居不下,最后响应异常,被健康检查进程杀掉。
进一步分析堆栈,查找FullGC诱因,
第四步&#