提问者:小点点

如何捕获HeapDumpOnOutOfMemoryError


我已经在tomcat 7.0.55中部署了一个应用程序进行测试。我想捕获“HeapDumpOnOutOfMemoryError”是否正在发生。以下是我的JVM参数。

JAVA_OPTS="-server-Xms512M-Xmx2048M-XX: PermSize=256m-XX: MaxPermSize=512m-XX: UseConcMarkSweepGC-XX: UseParNewGC-XX: ThreadStackSize=512-XX: HeapDumpOnOutOfMemoryError-XX: HeapDumpPath=/apps/Dumps/"

我在目录下没有看到任何文件。它是在目录下创建一个文件,还是我必须手动创建一个附加文件?


共2个答案

匿名用户

您可以按如下方式使用:

-XX: 堆转储在内存错误之外 -XX:堆转储路径=

如果您知道进程id,还可以使用jmap手动生成内存映射:

jmap-J-d64-dump:format=b,文件=

您可以使用JHat分析转储。

jhat“转储文件的路径”。

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

匿名用户

检查写入配置的文件夹/apps/Dumps/是否存在权限问题。

供参考-https://blog.gceasy.io/2015/08/14/how-to-capture-heap-dump-jmap/https://blogs.oracle.com/LuzMestre/entry/how_to_collect_a_heap