一台服务器的CPU使用率逐渐达到100%,我发现CodeCache区域占用了231M,而阈值是240M。

我群集中的其他服务器都很好,CPU使用率为30%,CodeCache区域占用了110M。

我想知道CodeCache区域中存储了什么编译的代码,而服务器无法重新启动以避免破坏现场。

是否存在代码缓存转储?

ps:jdk版本为1.8

最佳答案

在更新的JDK版本中,可以使用jcmd Compiler.codecachejcmd Comiler.codelist
对于1.8,请尝试-XX:+ PrintCodeCache或–XX:+ PrintCodeCacheOnCompilation,尽管这样做只会给您提供摘要统计信息(请参见Is there any way to monitor the compiled code cache in Java?)。

jcmd codelist命令由JVM的CodeCache::print_codelist方法处理,但是在JDK 8中不可用-仅有的print_summary

PS:我也尝试过使用gcore生成核心转储,但是看不到如何以这种方式分析代码缓存。

关于java - 什么已编译的代码存储在JVM CodeCache区域中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56999687/

10-09 07:06