193

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

4

5 回答 5

263

以下是Oracle 文档的内容:

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

于 2009-02-12T20:14:39.887 回答
51

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

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

例如:

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

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

于 2013-12-10T13:54:08.293 回答
6

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

于 2015-10-26T23:27:31.363 回答
3

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

于 2017-09-26T14:13:57.963 回答
1

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

于 2021-07-08T13:51:22.953 回答