转储dump的地方,使用JBoss的HeapDumpOnOutOfMemoryError参数

问题描述 投票:0回答:5

有人告诉我,我可以将

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

java memory-leaks jboss heap-memory
5个回答
277
投票

以下是 Oracle 文档 的内容:

默认情况下,堆转储创建于 一个名为 java_pid.hprof 的文件 VM 的工作目录,如 上面的例子。您可以指定一个 替代文件名或目录 使用

-XX:HeapDumpPath=
选项。为了 例子
-XX:HeapDumpPath=/disk2/dumps
将导致堆转储 生成于
/disk2/dumps
目录。


54
投票

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

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

例如:

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

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


6
投票

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


3
投票

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


2
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.