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

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

以下是Oracle的文档要说的:

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

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

堆转储的path将作为一个variables提供,在放置提到的variables之后。

例如:

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

您可以从提到的path上的控制台查看转储。

我发现很难破译“VM的工作目录”的含义。 在我的示例中,我使用Java Service Wrapper程序来执行jar – 转储文件是在放置包装程序的目录中创build的,例如c:\ myapp \ bin。 我发现这个原因是因为这些文件可能相当大,并且在我发现它们的位置之前填满了硬盘。

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