【问题标题】:Java VisualVM Enable Heap Dump on OOMEJava VisualVM 在 OOME 上启用堆转储
【发布时间】:2012-01-08 19:53:20
【问题描述】:

根据documentation,当应用程序遇到 OutOfMemoryException 时,可以自动进行堆转储。
OutOfMemoryException 处理后从左侧菜单中消失。
这个功能在 VisualVM 中是如何工作的?

谢谢。


C:\work\temp>java -XX:HeapDumpPath=c:/work/temp/file.hprof -XX:+HeapDumpOnOutOfMemoryError -jar example.jar

【问题讨论】:

  • 程序退出后可以分析堆转储。
  • 我在哪里可以找到它(堆转储)?手动生成后,它出现在左侧菜单的处理下。启用“自动转储”复选框后,没有任何反应。
  • 通常是应用程序的工作目录。

标签: java profiling jvisualvm


【解决方案1】:

似乎应用程序刚刚在 OOM 时退出。在这种情况下,您必须使用特殊的 -XX 参数运行您的应用程序。请参阅JVM documentation 中的“转储”参数。应用程序终止后,您可以在工具中检查转储。

【讨论】:

  • 使用相同的方法我可以在抛出 java.lang.OutOfMemoryError 时将堆转储到文件中。只是想知道“视觉工具”到底是什么?..
  • 我猜 VisualVM 无​​法应对即将退出的应用程序。
  • 对我来说工具质量低。无论进程是否活跃,我都希望它在逻辑上在同一个地方显示快照。
  • 和文档中的错误。提供 -XX:-HeapDumpOnOutOfMemoryError 但仅适用于 -XX:+HeapDumpOnOutOfMemoryError
  • 我发现在进程退出时从进程列表中删除应用程序节点也非常无用。发生 OOM 后,您可以使用 Eclipse Memory Analyzer Tool 分析堆转储文件。
【解决方案2】:

据我所知,JVisualVM 中的该选项相当于将-XX:+HeapDumpOnOutOfMemoryError 指定为JVM 参数。这会导致 JVM 在遇到 OutOfMemoryError 时创建堆转储文件。然后可以将该文件加载到 JVisualVM(或分析器)并在那里进行分析。文件存放的目录由-XX:HeapDumpPath参数定义。

另见:

【讨论】:

    猜你喜欢
    • 2021-01-02
    • 1970-01-01
    • 2017-10-31
    • 2015-03-22
    • 2014-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-08
    相关资源
    最近更新 更多