C2 CompilerThread9 长时间占用CPU解决方案

一、问题描述

近期在进行日常巡检时发现,线上部分应用服务器的CPU突然比以往高出很多,经过登录机器排查确认是C2 CompilerThread9线程始终长时间运行消耗了CPU。

排查步骤在上篇博文有记录总结,地址:排查CPU异常步骤_u012538947的专栏-CSDN博客_cpu异常

异常线程的堆栈如下:

"C2 CompilerThread9" #48 daemon prio=9 os_prio=0 tid=0x00007f45f0b80000 nid=0x188 runnable [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

补充描述:我的应用类型为后台接口服务,系统秒级调用峰值在10W+,JRE版本如下:

java version "1.8.0_60"
Java(TM) SE Runtime Environment (build 1.8.0_60-b27)
Java HotSpot(TM) 64-Bit Server VM (build 25.60-b23, mixed mode)

二、问题解决过程

思路1:修改codeCache的默认大小(结论:没有效果)

什么是CodeCache?(主要参考博文:Code Cache满导致应用性能降低_weixin_34203426的博客-CSDN博客

Java代码在执行次数达到一个阈值会触发JIT编译,一旦代码块被编译成本地机器码,下次执行的时候会直接运行编译后的本地机器码。所以这本地机器码必须被缓存起来,而缓存这个本地机器码的内存区域就是Code Cache,它并不属于Java堆的一部分,除了JIT编译的代码之外,Java所使用的本地方法代码(JNI)也会存在codeCache中。

通过查阅了网上的N多资料,了解到当CodeCache空间使用完之后,JVM的JIT功能会被停止,将不会编译任何额外的代码;被编译过的代码仍然以编

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值