使用HeapDumpOnOutOfMemoryError参数进行JBoss的堆转储

时间:2009-02-12 19:58:43

标签: java jboss memory-leaks heap

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

5 个答案:

答案 0 :(得分:234)

以下是Oracle's documentation所说的内容:

  

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

答案 1 :(得分:45)

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

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

E.g:

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

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

答案 2 :(得分:3)

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

答案 3 :(得分:2)

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

答案 4 :(得分:0)

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

相关问题