【JAVA线上问题解决】JAVA应用程序CPU持续飙高,如何排查问题,如何快速定位问题,解决问题?
场景一、JAVA程序中某个线程占用CPU飙高,问题定位 top、jstack命令的使用
四步教你快速定位问题代码
1. top命令获取异常的java进程 PID
top
2. 查询异常进程中的线程情况, 获取异常线程的线程ID
top -Hp {PID}
3. 将线程ID转为十六进制
printf "%x\n" 线程ID
4. jstack工具跟踪堆栈定位问题代码
jstack 进程PID | grep 十六进制的线程ID -A 30
场景二、JAVA程序中不上某个线程占用CPU飙高,问题定位 vmstat、 top、jstack命令的使用
如果不是单独的某个线程导致cpu飙高,那可能是多个线程之间切换导致cpu占用持续飙高。可以通过vmstat 命令来判断
1. 查询线程切换的频率,2秒刷新一次
vmstat 2
2. 定位问题线程
top -Hp {PID}
3. 找到任意一个问题线程,线程id转换成十六进制
printf "%x\n" 线程ID
4. jstack工具跟踪堆栈定位问题代码
jstack 进程PID | grep 十六进制的线程ID -A 30