使用Oracle的Hotspot JVM,看来jmap -dump:file=/tmp/dump.txt <pid>
可用于进行堆转储。
但是,Eclipse OpenJ9不包含jmap
工具-如果您尝试将常规jmap
与OpenJ9的jvm一起使用,则会出现以下异常:
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进行堆转储?
答案 0 :(得分:0)
当信号3传递给OpenJ9 JVM时,您可以使用-Xdump:heap:events=user
启用堆转储。因此,使用此选项启动应用程序,然后发出kill -3 <pid>
来获取堆转储。
您还可以根据需要使用Xdump Option Builder tool生成-Xdump
选项。
答案 1 :(得分:0)
可以使用命令 jcmd <PID> Dump.heap <path>.phd
创建 OpenJ9 堆转储。
例如:
jcmd 1 Dump.heap /tmp/heap-dump.phd
注意:
jps -l
将列出可用的进程。或者,使用 YourKit 拍摄内存快照:
bash ./YourKit-JavaProfiler-2021.3/bin/attach.sh
java -jar ./YourKit-JavaProfiler-2021.3/lib/yjp-controller-api-redist.jar localhost 10001 capture-memory-snapshot
来源: