Как взять дамп кучи с Eclipse OpenJ9?

С Oracle Hotspot JVM это выглядит так jmap -dump:file=/tmp/dump.txt <pid> может быть использован, чтобы взять дамп кучи.

Тем не менее, Eclipse OpenJ9 не включает в себя jmap инструмент - и если вы пытаетесь использовать обычный jmap с jvm OpenJ9, это дает исключение:

Exception in thread "main" java.lang.ClassCastException: com.ibm.tools.attach.attacher.OpenJ9VirtualMachine incompatible with sun.tools.attach.HotSpotVirtualMachine
    at java.lang.ClassCastException.<init>(java.base@10.0.2-adoptopenjdk/ClassCastException.java:71)
    at sun.tools.jmap.JMap.executeCommandForPid(jdk.jcmd@10.0.2-adoptopenjdk/JMap.java:128)
    at sun.tools.jmap.JMap.dump(jdk.jcmd@10.0.2-adoptopenjdk/JMap.java:192)
    at sun.tools.jmap.JMap.main(jdk.jcmd@10.0.2-adoptopenjdk/JMap.java:110)

Итак, как можно получить дамп кучи с OpenJ9?

2 ответа

Дамп кучи OpenJ9 можно создать с помощью команды jcmd <PID> Dump.heap <path>.phd.

Например:

      jcmd 1 Dump.heap /tmp/heap-dump.phd

Уведомление:

  • Он должен запускаться от имени того же пользователя, от имени которого запущена JVM.
  • PID должен быть идентификатором проверяемого процесса JVM. jps -l перечислит доступные процессы.

В качестве альтернативы используйте YourKit, чтобы сделать снимок памяти:

Источники:

Вы можете использовать -Xdump:heap:events=user чтобы включить дамп кучи, когда сигнал 3 передается в OpenJ9 JVM. Итак, запустите приложение с этой опцией, а затем выполните kill -3 <pid> чтобы получить свалку в кучу.

Вы также можете использовать инструмент Xdump Option Builder для генерации -Xdump варианты на основе ваших требований.

Другие вопросы по тегам