【问题标题】:dmp file in Java? [duplicate]Java中的dmp文件? [复制]
【发布时间】:2014-04-08 06:14:20
【问题描述】:

我知道可以从 C++ 项目中转储 .dmp 文件。这个 dmp 文件可以由 Visual Studio 打开,这非常有用,因为您可以导航调用堆栈以查找变量值。

JVM也存在这种机制吗?

【问题讨论】:

    标签: java c++ jvm dmp


    【解决方案1】:

    您可以使用-XX:HeapDump JVM options

    使用以下 JVM 选项:

    -XX:-HeapDumpOnOutOfMemoryError 
    -XX:HeapDumpPath="/tmp"
    

    JVM 会将堆的内容转储到指定目录中的文件中。请注意,这仅在抛出 OutOfMemoryError 时发生,因为如果 JVM 由于其他原因而崩溃,则不需要转储。

    您可能还想阅读http://docs.oracle.com/javase/6/docs/technotes/tools/share/jhat.html 一次

    【讨论】:

    • @DakashShah 谢谢,但我希望它不仅在抛出 OutofMemoryError 时发生。我希望我的 Java 服务器在遇到任何异常(即 NullPointerException)时转储它的堆栈和堆
    • 另外,是否可以使用这种方法通过 Eclipse 打开转储文件,以便像 Visual Studio dmp 文件一样导航调用堆栈?
    • @user1028741 这个我没试过,我想你需要自己试一下看看
    【解决方案2】:

    如何获取 JVM 转储?

    1. 您可以在想要获取 JVM 转储时使用 jmap

      jmap -dump:format=b,file=/path/to/store/dumpfile jvmpid

    2. 您可以在启动时添加 JVM 选项以在 OOM 时获取 JVM 转储。

      -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path/to/store/dumpfile

    如何分析jvm转储文件?

    1. 使用Memory Analyzer (MAT)

    Eclipse 内存分析器是一款快速且功能丰富的 Java 堆分析器,可帮助您发现内存泄漏并减少内存消耗。

    2.使用IBM HeapAnalyzer

    HeapAnalyzer 允许通过其启发式搜索引擎和分析 Java 应用程序中的 Java 堆转储来发现可能的 Java™ 堆泄漏区域。

    【讨论】:

    • +1 非常好的答案。我没有标记为已解决,因为这仍然仅用于跟踪内存泄漏,并且在转储时不会显示堆栈中的变量值。 (我正在尝试调试其他异常 - 不是内存泄漏)。
    【解决方案3】:

    您可以远程调试(例如with Eclipse)您的 Java 应用程序,以便查看堆栈和变量内容。

    或者您可以进行线程转储(例如使用jstack)。但这不包括变量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-14
      • 1970-01-01
      • 1970-01-01
      • 2011-07-04
      • 2019-09-12
      • 2021-05-25
      相关资源
      最近更新 更多