一台服务器的CPU使用率逐渐达到100%,我发现CodeCache区域占用了231M,而阈值是240M。
我群集中的其他服务器都很好,CPU使用率为30%,CodeCache区域占用了110M。
我想知道CodeCache区域中存储了什么编译的代码,而服务器无法重新启动以避免破坏现场。
是否存在代码缓存转储?
ps:jdk版本为1.8
最佳答案
在更新的JDK版本中,可以使用jcmd Compiler.codecache
和jcmd 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/