首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Eclipse OpenJ9获取堆转储?

如何使用Eclipse OpenJ9获取堆转储?
EN

Stack Overflow用户
提问于 2019-07-01 16:56:38
回答 2查看 1.4K关注 0票数 4

使用Oracle的Hotspot JVM,看起来jmap -dump:file=/tmp/dump.txt <pid>可以用来获取堆转储。

然而,Eclipse并不包含jmap工具--如果你尝试在OpenJ9中使用常规的jmap,它会给出一个异常:

代码语言:javascript
复制
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进行堆转储呢?

EN

回答 2

Stack Overflow用户

发布于 2019-08-08 17:06:56

当信号3被传递到OpenJ9 JVM时,您可以使用-Xdump:heap:events=user来启用堆转储。因此,使用此选项启动应用程序,然后发出kill -3 <pid>来获取堆转储。

您还可以使用Xdump Option Builder tool根据您的需求生成-Xdump选项。

票数 0
EN

Stack Overflow用户

发布于 2021-07-02 09:11:44

可以使用命令jcmd <PID> Dump.heap <path>.phd创建OpenJ9堆转储。

例如:

代码语言:javascript
复制
jcmd 1 Dump.heap /tmp/heap-dump.phd

注意:

  • 必须以与运行JVM相同的用户身份运行。
  • PID必须是要检查的JVM进程的ID。jps -l将列出可用进程。

或者,使用YourKit获取内存快照:

  • Download YourKit并提取它,使用快照,例如bash ./YourKit-JavaProfiler-2021.3/bin/attach.sh
  • Capture a Console Attach Wizardjava -jar ./YourKit-JavaProfiler-2021.3/lib/yjp-controller-api-redist.jar localhost 10001 capture-memory-snapshot

资料来源:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56832718

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档