【问题标题】:Acquiring heap dump from a Java process to debug memory leaks从 Java 进程获取堆转储以调试内存泄漏
【发布时间】:2017-04-07 03:45:51
【问题描述】:

遵循以下过程,但我无法分析生成的转储。

  1. 我尝试使用“jmap -F -dump:format=b,file=/tmp/test.hprof”从 Linux 机器上运行的 Java 进程获取堆转储
  2. 在 60 秒后按 Ctrl+C
  3. 使用 Eclipse MAT(内存分析器工具)启动上述步骤生成的堆转储,但我看到以下错误。

在“从 '/users/sobhan/Test.hprof' 解析堆转储”期间发生内部错误。 java.lang.NullPointerException

PS:我尝试了其他分析工具,如 VisualVM、IBM Heap Analyzer,结果是一样的。我认为堆转储已损坏(此处使用 Ctrl+C 是否有问题?)。如果是这样,请提出正确的方式 lo 优雅地退出 'jmap'

提前致谢。

【问题讨论】:

  • Ctrl+C after a span of 60 seconds -> 没有工具能够解析截断的堆转储
  • 您能否建议在一定时间后优雅退出 jmap 的方法@IngoKegel
  • 不,这不可能,它必须定期完成

标签: java memory-leaks heap-dump jmap hprof


【解决方案1】:

您需要等待堆转储完成。根据堆的大小,可能需要几秒钟到几分钟。至少有一次,我花了 20 分钟(如果我没记错的话,转储的大小约为 10G)。您可以尝试“-dump:live”选项,它只会转储活动对象而不转储垃圾。

jmap -F -dump:live,format=b,file=<file_name.hprof> <rdu_process_id>

不过,您可能也会遇到this issue

【讨论】:

    猜你喜欢
    • 2021-11-06
    • 1970-01-01
    • 1970-01-01
    • 2018-07-15
    • 2010-12-01
    • 2017-06-20
    • 1970-01-01
    • 2011-01-31
    • 2016-10-02
    相关资源
    最近更新 更多