1回复
2年前
code cache占满导致CPU使用率升高的问题
我们有一个服务,线上一共三台机器,经常会有其中一台服务的CPU使用率升高的情况。java 版本为
登录到服务器上打印堆栈信息,确认导致CPU升高的线程是C2 CompilerThread。
查看监控也能看出,报警的服务器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 阅读