我一直在尝试在使用 Jmap 的给定 Java 进程上发生 OutOfMemoryError 时转储堆文件。

我已经能够转储堆文件,但我想将 HeapDumpOnOutOfMemoryError 标志添加到 Jmap,但我认为我做错了什么。难道我做错了什么?我试过了:

jmap -J-XX:+HeapDumpOnOutOfMemoryError -dump:live,file=/home/eduardo2/dumpfile.hprof 18763

当我运行上面的内容时,它只是说以下内容——但它不会等待 OutOfMemoryError:
>> Dumping heap to /home/eduardo2/dump21file.hprof ...
>> Heap dump file created

最佳答案

你混淆了两种不同的东西:

  • 像您一样使用 jmap 从正在运行的进程中捕获堆转储。见 https://docs.oracle.com/javase/7/docs/technotes/tools/share/jmap.html
  • 在您期望抛出 -XX:+HeapDumpOnOutOfMemoryError 的 java 进程上使用 OOM 。如果发生异常,则会将转储写入当前目录。见 https://docs.oracle.com/javase/7/docs/webnotes/tsg/TSG-VM/html/clopts.html#gbzrr
  • 关于java - 使用 Jmap 在 OutOfMemoryError 上转储 Java 堆文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52979300/

    10-10 19:40