1 告警短信提示
2 使用 top 找到CPU占用过高的进程
使用 top -p [进程号] 查看某一个进程的详细信息
可以在上面的页面中输入 H (大写的),可以看到线程信息,我忘了截图。
[root@c2-kl-WebServer-1 ~]# printf "%x\n" 11721 (线程ID)
2dc9
[root@c2-kl-WebServer-1 ~]# jstack 11718 | grep 4822
"GC task thread#0 (ParallelGC)" os_prio=0 tid=0x00007f9df001e000 nid=0x2dc9 runnable
从上面jstack中看,并没有我预期的jstack中的***Class 正在运行 ,就是打印出有问题的代码,由此判断应该是程序 GC问题。
使用 jmap 打印下heap的使用情况 , 从打印的 heap 信息可以看出新声代和老年代使用率达到了 99%。
jstat -gc 11718 5000
从结果来看打印的这段时间内YGC没有增加,就说明没有进行young gc ,而FGC,名字增加很快,说明这么几秒中内进行了多次FullGc,如果没有配置gc的回收机制的情况下用的串行回收器,fullgc是会影响所有线程,gc频繁就会占用大量的cpu时间片,从而导致其他服务变慢,超时等。
问题定位到后面就是应用程序GC的优化了。