【问题标题】:hprof (heap dump size) considerably smaller than heap allocatedhprof(堆转储大小)远小于分配的堆
【发布时间】:2015-09-16 21:14:44
【问题描述】:

我一直在分析 java.lang.OutOfMemoryError: Java heap space for our service 并尝试通过 Eclipse MAT 工具挖掘堆转储。

我们的服务使用 8G 堆运行,生成的堆转储大小仅为 500 MB。

这里是 JVM 命令行标志: -XX:-DoEscapeAnalysis -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/tmp -XX:InitialHeapSize=8589934592 -XX:MaxGCPauseMillis=10 -XX:MaxHeapSize=8589934592 -XX: NewSize=4294967296 -XX:OnOutOfMemoryError=/bin/kill -9 %p -XX:+PrintClassHistogram -XX:-PrintCommandLineFlags -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintTenuringDistribution -XX:SurvivorRatio =8 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseG1GC

堆转储大小:-rw------- 1 taxadm amazon 557201181 Sep 16 15:10 java_pid4026.hprof

这是正确的堆转储吗?因为我们的服务极不可能尝试分配 7.5 GB 数组?

感谢您的帮助

【问题讨论】:

    标签: java out-of-memory heap-memory hprof


    【解决方案1】:

    这听起来太小了,你确定你的内存不足不是因为 PermGen Space OOM 吗?当您在 OOM 发生后很晚手动生成转储文件时,生成的转储文件可能很小,但您的情况并非如此。

    【讨论】:

    • 嗨 Kisna,Java 8 中没有 PermGen,更新 JVM 版本后该问题消失了。
    【解决方案2】:

    以防万一有人最终在这里寻找:

    java.lang.OutOfMemoryError: Java 堆空间

    和我一样:使用XX:+HeapDumpOnOutOfMemoryError 很重要。我的代码意外创建了无限循环并使用jmap -heap after 错误显示没有错误,没有泄漏,实际上堆使用率很低。另一方面,在 OOM 上自动完成的堆转储很大,并且清楚地显示(在 MAT 中)出了什么问题。

    【讨论】:

      猜你喜欢
      • 2021-03-26
      • 2014-09-12
      • 2017-04-27
      • 1970-01-01
      • 1970-01-01
      • 2022-11-23
      • 2018-06-29
      • 1970-01-01
      • 2018-04-14
      相关资源
      最近更新 更多