【问题标题】:What is the best format for Heapdump file to analyze? Is it hprof?Heapdump 文件分析的最佳格式是什么?是hprof吗?
【发布时间】:2015-02-14 10:55:22
【问题描述】:

我被指派在我们的生产环境中查找 Full GC 问题(垃圾收集器)的根本原因。它是随机发生的,我认为最可能的情况是当前应用程序中存在内存泄漏。我希望从我们的生产环境(linux)中获取内存转储,并使用 Eclipse Memory Analyzer 等 GUI 工具进行分析。

要分析的堆转储文件的最佳文件格式是什么?是hprof格式吗?我将使用 jmap 命令获取堆转储。获取内存转储时是否需要指定“format=b”选项?

以下是我将指示我们的支持团队运行的示例命令。 (5980 是一个示例 pid)。

如果您认为有更好的方法,请告诉我。

jmap -dump:format=b,file=hpdump.hprof 5980

谢谢

【问题讨论】:

  • 考虑让他们定期运行 jstat 并绘制结果。看看它是否真的是不可预测的。此外,使用 -XX:+HeapDumpOnOutOfMemoryError 运行将使 JVM 在重要时准确地创建转储。第三,在开发服务器上运行这些工具以熟悉结果。更好的是,运行 jvisualvm。
  • 分析这样的内存转储是否需要额外的硬件支持?有时 Eclipse 内存分析器会崩溃。
  • 内存转储越大,分析起来就越笨拙。因此,如果您之前建议简单地增加内存以查看是否有帮助,现在要求他们向您发送 OOM 错误发生时产生的巨大转储,那么分析器在机器上分析时可能会遇到困难内存更少。

标签: java heap-dump


【解决方案1】:

该命令似乎没问题。是的,几乎没有其他工具可用于分析堆转储。 请参考this

【讨论】:

  • 分析这样的内存转储是否需要额外的硬件支持?有时 Eclipse 内存分析器会崩溃。
  • 分析内存泄漏问题总是很棘手,我找到了一些商业工具,有很多选项可以识别这些问题。遵循最佳实践来防止内存泄漏总是好的。
【解决方案2】:

我无法将堆转储文件作为生产环境中的空间限制。分析直方图文件也让我无处可去。相反,我能够找到 GC 日志分析工具,IBM GCMV 这有助于分析一年中导致 Full GC 问题的特定日期的 GC 日志。

GC 日志的绘制图表揭示了整个故事。在每种情况下都可以观察到内存消耗的急剧上升,并且从某个事件的开始只用了不到 10 分钟就达到了最大内存。我计算了初始上升点的时间戳,并与相应时间戳的服务器日志进行了比较。这为上升开始时经常出现在服务器日志中的少数特定进程提供了强有力的证据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-16
    • 2014-09-29
    • 1970-01-01
    相关资源
    最近更新 更多