今天还是像往常一样下班后坐公交车回家,突然工作微信群里发来一个截图,我点开一看是我之前上线的服务占用CPU过高了导致程序直接卡死。记录分享一下我的解决思路希望可以帮到你们。
1. 先查看监控里每个逻辑cpu情况
1 | 执行命令:top |
2. 查看进程jvm虚拟机堆使用情况
1 | 执行命令:jmap -heap 28292 |
3. 打印最近一次GC情况
1 | 执行命令:jstat -gcutil 28292 |
4. 查看java哪个线程cpu占用高
1 | 执行命令:top -H -p 28292 |
5. 确定线程id,再通过命令计算十六进制值
1 | 执行命令:printf "%x\n" 28329 |
6. 打印该线程堆栈内容
1 | 执行命令:jstack 28292 | grep 6ea9 -A 100 |
至此,根据截图里面的错误信息基本就可以定义到具体代码类的位置了。