内存使用量增长,直到VM在使用Java 8运行Wildfly 9时崩溃
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了内存使用量增长,直到VM在使用Java 8运行Wildfly 9时崩溃相关的知识,希望对你有一定的参考价值。
我们遇到了本机内存耗尽的虚拟服务器(VM)问题。这些虚拟机正在运行:Linux 7.2(Maipo)Wildfly 9.0.1 Java 1.8.0._151运行(不同的JVM具有不同的堆大小。它们的范围从0.5G到2G)JVM args是:
-XX:+UseG1GC
-XX:SurvivorRatio=1
-XX:NewRatio=2
-XX:MaxTenuringThreshold=15
-XX:-UseAdaptiveSizePolicy
-XX:G1HeapRegionSize=16m
-XX:MaxMetaspaceSize=256m
-XX:CompressedClassSpaceSize=64m
-javaagent:/<path to new relic.jar>
大约一个月后,有时更长时间,VM开始使用他们所有的交换空间,然后最终OOM-Killer注意到java使用了太多内存并杀死了我们的JVM之一。
使用-XX显示java进程使用的内存量大于堆+ metaSpace +压缩:NativeMemoryTracking = detail
是否有工具可以告诉我这个本机内存中的内容(如堆转储但不是堆)?
是否有任何工具可以将java堆使用情况映射到不是jemalloc的本机内存使用情况(堆外)?我已经使用jemalloc来尝试实现这一点但是正在绘制的图形只包含十六进制值而不是人类可读的类名,因此我无法从中获得任何结果。也许我做错了或者我需要另一种工具。
任何建议将不胜感激。
答案
你可以使用jcmd。
- 使用-XX启动应用程序:NativeMemoryTracking = summary或 - XX:NativeMemoryTracking = detail
- 使用jcmd监视NMT(本机内存跟踪器)
jcmd“pid”VM.native_memory baseline //获取基线
jcmd“pid”VM.native_memory detail.diff //根据您的需要使用从基线分析本地内存变化的更多信息
以上是关于内存使用量增长,直到VM在使用Java 8运行Wildfly 9时崩溃的主要内容,如果未能解决你的问题,请参考以下文章