【问题标题】:Using HeapDumpOnOutOfMemoryError parameter for heap dump for JBoss使用 HeapDumpOnOutOfMemoryError 参数进行 JBoss 的堆转储
【发布时间】:2010-10-07 06:40:01
【问题描述】:

有人告诉我,当我们的应用程序出现内存不足错误时,我可以将 -XX:+HeapDumpOnOutOfMemoryError 参数添加到我的 JBoss 启动脚本的 JVM 启动选项中,以获取堆转储。我想知道这些数据在哪里被转储?它只是到控制台,还是到某个日志文件?如果只是到控制台,如果我没有通过控制台登录Unix服务器怎么办?

【问题讨论】:

  • 我猜这是当前文件夹。

标签: java memory-leaks jboss heap-memory


【解决方案1】:

Oracle's documentation 是这样说的:

默认情况下,堆转储创建于 一个名为 java_pid.hprof 的文件 VM 的工作目录,如 上面的例子。您可以指定一个 替代文件名或目录 使用 -XX:HeapDumpPath= 选项。为了 例如-XX:HeapDumpPath=/disk2/dumps 将导致堆转储 在/disk2/dumps 中生成 目录。

【讨论】:

  • 这也列出了所有与 VM 性能相关的选项:java.sun.com/javase/technologies/hotspot/…
  • 重要! HeapDump 标志仅适用于 Java 1.5.0_07。
  • 另外,重要的是要认识到 JVM 不会覆盖 HeapDumpPath 中的现有堆转储,您会在标准输出中看到类似于 "Unable to create /tmp/java_pidpid.hprof: File exists" 的内容。确保将转储文件移出转储路径,以便为以后的任何转储文件扫清障碍;并利用文件名中的<pid> 占位符来增加文件名中的熵。
  • 这非常有用。使用 Eclipse 内存分析器只需几分钟即可找到泄漏。
  • 如果我们给出系统中不存在的文件夹的路径会发生什么?它会创建文件夹并在该文件夹中推送驼峰转储吗?
【解决方案2】:

您可以从 UNIX 控制台查看此转储。

堆转储的路径将在您放置上述变量的位置之后作为变量提供。

例如:

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${DOMAIN_HOME}/logs/mps"

您可以从上述路径上的控制台查看转储。

【讨论】:

    【解决方案3】:

    我发现很难理解“VM 的工作目录”是什么意思。在我的示例中,我使用 Java Service Wrapper 程序来执行一个 jar - 转储文件是在我放置包装程序的目录中创建的,例如c:\myapp\bin。我发现这是因为文件可能非常大,并且在我发现它们的位置之前它们已经填满了硬盘驱动器。

    【讨论】:

    • 您的工作目录可以通过 pwdx 命令找到。首先做一个 ps -ef| grep java,为您的 java 应用程序找到您的 PID,然后运行 ​​pwdx 。它会告诉你工作目录。
    【解决方案4】:

    如果您没有使用“-XX:HeapDumpPath”选项,那么对于 JBoss EAP/As,默认情况下堆转储文件将在“JBOSS_HOME/bin”目录中生成。

    【讨论】:

      【解决方案5】:

      如果只配置 -XX:+HeapDumpOnOutOfMemoryError 参数,那么对于 OpenJDK/Oracle JDK 会在 JBOSS_HOME/bin 目录下生成 heapdump。如果您使用的是 IBM JDK,那么 heapdump 将在 /tmp 目录下创建为 phd 文件。 -XX:HeapDumpPath 选项为我们配置自定义头泵路径位置提供了更多可行性(-XX:HeapDumpPath=/my-custom-jboss-server-path/)。建议在您的环境中配置此参数,因为它将在 OutOfMemory 错误时收集堆转储,以分析应用程序的内存泄漏问题或检查应用程序中的任何大型对象保留。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-09-02
        • 1970-01-01
        • 2017-10-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-04
        • 1970-01-01
        相关资源
        最近更新 更多