CPU占用很高排查方案
目录
思路
问题分析
解決方案
思路
- ps aux |grep java 查看到当前java进程使用cpu、内存、磁盘的情况获取使用量异常的进程
- top -Hp 进程pid检查当前使用异常线程的pid
- 把线程pid变为16进制如 31695-》7bcf 然后得到Ox7bcf
- jstack 进程的pid |grep -A200x7bcf 得到相关进程的代码
问题分析
那么如果是生产环境的话,是怎么样才能发现目前程序有问题呢?我们可以推导一下,如果线程死锁,那么线程一直在占用CPU,这样就会导致CPU一直处于一个比较高的占用率。所示我们解决问题的思路应该是:
- 首先查看java进程ID
- 根据进程 ID 检查当前使用异常线程的pid
- 把线程pid变为16进制如 31695-> 7bcf 然后得到0x7bcf
- jstack 进程的pid | grep -A20 0x7bcf 得到相关进程的代码
接下来是我们的实现上面逻辑的步骤,如下所示:
查看所有java进程 ID
jps -I
解決方案
- 调整锁的顺序,保持一致
- 或者采用定时锁,一段时间后,如果还不能获取到锁就释放自身持有的所有锁。
延伸阅读
IT架构系列