思路
cpu飙高第一印象是可能业务代码出现了死循环,或者是系统频繁GC导致cpu高,或者是应用程序整体qps比较到,导致在某个时刻出现cpu迅速飙高,但是系统偶尔就出现cpu飙高肯定不是正常的现象。
命令
查找出java进程ID
jps -l
找出进程中消耗CPU或者内存最高的线程 默认按cpu使用率排序
top -H -p pid
将执行进程下的线程输出
ps -mp pid -o THREAD,tid,time
示例 : ps -mp 26 -o THREAD,tio,time
线程ID转为16进制
printf “%x\n” tid
打印出进程中某个线程的堆栈信息
jstack pid |grep tid -A 30
示例 jstack 26 |grep 28 -A 30 这里的-A 参数是跟grep命令搭配使用的 显示出当前线程ID的后30行数据 也可以搭配 -C 使用 -C 就是前后各n行