文章目录
1. 查找进程下占用过高CPU的线程
1.1 查找应用对应的pid
jps
1.2 查看哪个线程cpu占用高,确定对应的线程id:
top -H -p <pid>
1.3 计算线程id的十六进制值
printf "%x\n" <thread_id>
1.4 打印线程堆栈内容
jstack <pid> | grep <线程id十六进制值> -A 30
参数: -A 30 表示向下打印30行
2. 高CPU分析 : C2 Compiler Thread
2.1 概念
C2 Compiler 是JVM在server模式下字节码编译器,JVM启动的时候所有代码均处于解释执行模式,当某些代码被执行到一定阈值次数,热点代码就会被 C2 Compiler编译成机器码,执行效率大幅提升。
编译热点代码,C2 Compiler需要频繁占用CPU来运行,当热点代码被编译成机器代码后,C2 Compiler不再长期占用CPU
2.2 .解决方案
(1) 最直接有效的方法是预热。使用压测工具让C2 Compiler预先将热点代码编译成机器码
(2) 设置JVM启动参数:-XX:CICompilerCount=threads
默认是2, 可以设置4或6。对于CPU“高而不满”的情况会有用,缩短占用时间