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

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的占用大小都取决于哪些因素呢?

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

 

 

 

967 阅读
请先登录,查看1条精彩评论吧
快去登录吧,你将获得
  • 浏览更多精彩评论
  • 和开发者讨论交流,共同进步