使用Oracle的Hotspot JVM,看起来jmap -dump:file=/tmp/dump.txt <pid>可以用来获取堆转储。
然而,Eclipse并不包含jmap工具--如果你尝试在OpenJ9中使用常规的jmap,它会给出一个异常:
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进行堆转储呢?
发布于 2019-08-08 17:06:56
当信号3被传递到OpenJ9 JVM时,您可以使用-Xdump:heap:events=user来启用堆转储。因此,使用此选项启动应用程序,然后发出kill -3 <pid>来获取堆转储。
您还可以使用Xdump Option Builder tool根据您的需求生成-Xdump选项。
发布于 2021-07-02 09:11:44
可以使用命令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.shjava -jar ./YourKit-JavaProfiler-2021.3/lib/yjp-controller-api-redist.jar localhost 10001 capture-memory-snapshot资料来源:
https://stackoverflow.com/questions/56832718
复制相似问题