记录一下java生产环境CPU占用过高实例

今天还是像往常一样下班后坐公交车回家,突然工作微信群里发来一个截图,我点开一看是我之前上线的服务占用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

至此,根据截图里面的错误信息基本就可以定义到具体代码类的位置了。