有个视频讲得不错:拼多多面试官:线上CPU飙高如何排查?
保姆级教程
第一步,top 先看看是哪个进程 找到,cpu占用最高的,如果是java 然后用,jstat 进程id 得到当前进程下,所有运行的线程,然后找到占用最高的线程,然后把线程id转成16进制字符串,然后看jstack 之前的进程id grep 下线程id 就可以找到这个线程到底在干嘛?一般都是gc在搞事情
简洁版
1、top命令,然后按shift+p按照CPU排序,找到占用CPU过高的进程的pid
2、top -H -p [进程id] 找到进程中消耗资源最高的线程的id
3、printf "%x\n" [线程id] 将需要的线程ID转换为16进制格式
4、jstack [进程id] |grep -A 10 [线程id的16进制]”