性能问答>code cache占满导致CPU使用率升高的问题>
1回复
4月前

code cache占满导致CPU使用率升高的问题



我们有一个服务,线上一共三台机器,经常会有其中一台服务的CPU使用率升高的情况。java 版本为

登录到服务器上打印堆栈信息,确认导致CPU升高的线程是C2 CompilerThread。

"C2 CompilerThreadO " #8 daemon prio=9 
java. lang. Thread. State: RUNNABLE 
Locked ownable synchronizers : 
— None 
os_pr io=O 
tid=Ox00007f78dcc63000 
nid= 
ox37 
runnable [Oxooooooooooooooool 
"JDWP Event Helper Thread" #7 daemon prio=10 os_prio=O tid=Ox00007f78dcc60800 nid=Ox36 runnable [OxOOOOOOOOOOOOOOOOl 
java. lang. Thread. State: RUNNABLE 
Locked ownable synchronizers: 
— None

查看监控也能看出,报警的服务器code cache使用率达到了90%以上

 

查询网上资料得知,C2 Compiler会把代码编译成机器码保存在code cache中,以提高执行效率。但是当code cache被占满后,未被编译的代码就会一解释的方式执行,占用较多的CPU。

以为是code cache不够用,于是把code 从240M跳到了500M。但是过一段时间仍然会有一台服务器出现CPU升高的情况,code cache使用率达到90%。而另外两台服务器都是正常的,code cache一直只有100多M。重启服务器能解决问题,但是过几天三台中又会有一台出现这种情况。

对比过三台服务器的监控,流量分布式很均匀的。有两个问题一直没有弄明白,1)为什么三台机器中永远只有其中一台的code cache会占用很多内存?如果是代码本身的原因导致会占用较多的code cache,应该是三台都升高才正常。 2) 调大了code cache的值之后,使用率仍然会达到90%以上,code cache为什么会一直上涨,code cache的占用大小都取决于哪些因素呢?

有大佬了解或遇到过类似问题的话,麻烦帮忙解答下,先行谢过。

 

 

 

361 阅读
请先登录,再评论

看你描述的,你可以先确认下是否是流量不均,导致其中一台承担了大量请求;还有一种可能是你们是不是有啥大型的调度任务调度到了这台机器执行而触发了大量的jit编译

14月前