1. 如果发现CPU占用率不高,java程序响应很慢
查看死锁问题的操作步骤如下:
- 通过jps命令,查看java进程pid
- 通过
jstack
查看线程日志
如果存在死锁情况,Thread Dump日志里面肯定会给出Found one Java-level deadlock:信息。只要 找到这个信息就可以立马定位到问题并且去解决。
2.CPU占用率很高,java程序响应很慢
有的时候我们会发现CPU占用率很高,系统日志也看不出问题,那么这种情况下,我们需要去看一下运行中的线程有没有异常。
- 通过top -c 动态显示进程及占用资源的排行榜,从而找到占用CPU最高的进程PID,得到的 PID=80972
- 然后再定位到对应的线程, top -H -p 80972 查找到该进程中最消耗CPU的线程,得到 PID=81122
- 通过 printf “0x%x\n” 81122 命令,把对应的线程PID转化为16进制
- 执行这个命令 jstack 80972 | grep -A 20 0x13ce2 查看线程Dump日志,其中-A 20表示 展示20行, 80972表示进程ID, 0x13ce2表示线程ID
从上述内容可以看出,是WhileThread.run方法中,执行的逻辑导致CPU占用过高。