当前位置: 首页 > 图灵资讯 > java面试题> JVM高频面试题-线上服务CPU占用过高怎么排查?

JVM高频面试题-线上服务CPU占用过高怎么排查?

来源:图灵教育
时间:2023-11-13 09:15:12
 

线上服务CPU占用过高怎么排查?

问题分析:CPU高一定是某个程序长期占用了CPU资源。

CPU飙高

1、所以先需要找出那个进程占用CPU高。

  • top 列出系统各个进程的资源占用情况。

2、然后根据找到对应进行里哪个线程占用CPU高。

  • top -Hp 进程ID 列出对应进程里面的线程占用资源情况

3、找到对应线程ID后,再打印出对应线程的堆栈信息

  • printf "%x\n" PID 把线程ID转换为16进制。
  • jstack PID 打印出进程的所有线程信息,从打印出来的线程信息中找到上一步转换为16进制的线程ID对应的线程信息。

4、最后根据线程的堆栈信息定位到具体业务方法,从代码逻辑中找到问题所在。

查看是否有线程长时间的watting 或blocked,如果线程长期处于watting状态下, 关注watting on xxxxxx,说明线程在等待这把锁,然后根据锁的地址找到持有锁的线程。