【问题标题】:memory usage grows until VM crashes while running Wildfly 9 with Java 8在使用 Java 8 运行 Wildfly 9 时,内存使用量一直在增长,直到 VM 崩溃
【发布时间】:2017-12-19 21:48:39
【问题描述】:

我们遇到了虚拟服务器 (VM) 耗尽本机内存的问题。这些虚拟机正在运行: Linux 7.2(麦坡) 野蝇 9.0.1 Java 1.8.0._151 运行(不同的 JVM 有不同的堆大小。它们的范围从 0.5G 到 2G) JVM 参数是:

-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。

java进程使用的内存量大于使用-XX:NativeMemoryTracking=detail显示的堆+元空间+压缩

是否有工具可以告诉我本机内存中的内容(如堆转储但不是堆)?

是否有任何工具可以将 java 堆使用情况映射到非 jemalloc 的本机内存使用情况(堆外)?我已经使用 jemalloc 来尝试实现这一点,但是正在绘制的图形只包含十六进制值而不是人类可读的类名,所以我无法真正从中得到任何东西。也许我做错了什么,或者我需要其他工具。

任何建议将不胜感激。

【问题讨论】:

标签: java-8 jvm wildfly-9


【解决方案1】:

你可以使用 jcmd。

  1. 使用 -XX:NativeMemoryTracking=summary 或 - 启动应用程序 XX:NativeMemoryTracking=detail

  2. 使用 jcmd 监控 NMT(本机内存跟踪器)

jcmd "pid" VM.native_memory baseline //取基线

jcmd "pid" VM.native_memory detail.diff // 根据您的需要使用,以分析本机内存相对于基线的变化

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 2014-04-17
    • 2020-12-10
    • 1970-01-01
    相关资源
    最近更新 更多