近期在进行日常巡检时发现,线上部分应用服务器的CPU突然比以往高出很多,经过登录机器排查确认是C2 CompilerThread9线程始终长时间运行消耗了CPU。 排查步骤在上篇博文有记录总结,地址:排查CPU异常步骤_u012538947的专栏-CSDN博客_cpu异常 异常线程的堆栈如下: "C2 CompilerThread9" #48 daemon prio=9 os_prio=0 tid...
通过linux的top命令,显示当前活跃线程数,为CPU使用率降序排列 2. 使用jstack pid(示例:jstack 10420)命令查看java进程的堆栈状态 3. 通过thread dump分析线程状态 例如:jstack -F 10420 大多数情况下会基于thead dump分析当前各个线程的运行情况,如是否存在死锁、是否存在一个线程长时间持有锁不放等等......
性能截图如下(红色曲线为关闭分层编译的机器性能走势图): 启用分层编译时的CPU负载截图: 关闭分层编译后的CPU负载截图:
CPU使用率持续高水位(相比于调整前)。确实没了C2 thread 的问题,但是猜测由于代码编译的不够C2那么优秀,所以代码持续性能低下。 CPU截图: 5.2 增加C2 线程数 增加参数 :-XX:CICompilerCount=8 恢复参数:-XX:+TieredCompilation 效果一般,仍然有请求超时。但是会少一些。 CPU截图: 5.3 推论 其实从上面的分析可以...
定位到 C2 CompilerThread0这个线程占用了比较高的CPU。C2 Compiler 是JVM在server模式下字节码编译器,JVM启动的时候所有代码都处于解释执行模式,当某些代码被执行到一定阈值次数,这些代码(称为热点代码)就会被 C2 Compiler编译成机器码,编译成机器码后执行效率会得到大幅提升。
jstack: Java占用高CPU分析之- C2 Compiler Thread https://blog.csdn.net/chenxiusheng/article/details/74007750 规格严格-功夫到家 粉丝-152关注 -971 +加关注
你可以考虑通过使用参数'-XX:CICompilerCount'增加C2编译器线程。你可以捕获线程转储并将其上传到fastThread等工具,在那里你可以看到C2编译器线程的数量。如果你看到较少的C2编译器线程数,而你有更多的CPU处理器/核,你可以通过指定'-XX:CICompilerCount=8'参数增加C2编译器线程数。
本问题代码开启了三个线程,其中startBusinessThread方法用于启动两个业务线程,内部使用Thread.sleep(1000)来模拟业务执行代码,每秒钟输出字符串,startProblemThread方法用于启动问题线程,内部使用两层for循环来模拟CPU耗时运算。在main线程中首先启动业务线程和问题线程,随后睡眠1秒保证三个线程充分运行让JIT优化,随后调用System...
Please provide a brief summary of the bug We recently encountered an issue after upgrading to JDK 21 in our codebase, where CPU utilization for the Pod nearly doubled. Upon analyzing the thread dump, we identified that the C2 Compiler wa...
(TM) i7-9700 CPU @ 3.00GHz, 8 cores, 63G, Windows 11 , 64 bit Build 22621 (10.0.22621.1105) Time: Mon Mar 13 10:20:29 2023 Eastern Daylight Time elapsed time: 1889.917883 seconds (0d 0h 31m 29s) --- T H R E A D --- Current thread (0x0000022 hs_err_pid11208.log replay...