如何收集任何Java进程的堆转储

9

我对Heaps不熟悉,有人能否建议如何获取任何Java进程(如Jmeter)的堆转储? 我已经阅读了关于jmap命令的文章,但是我不知道在哪里以及如何执行/编写它(在Eclipse或cmd中)。这可能是一个非常基本的问题,但仍然需要建议。我可以从哪里下载jmap.exe和jhat.exe?谢谢。


我通常使用Jvisualvm来完成这个。 - garnulf
如果您使用Eclipse,还有Eclipse内存分析器。 - garnulf
我可以从任何地方下载jmap.exe和jhat.exe吗? - Pratha
嗨,我在使用Eclipse Memory Analyzer时,在获取堆转储窗口中无法添加PID,你能告诉我该如何继续吗? - Pratha
jmap、jvisualvm、jconsole等工具都与JDK捆绑在bin目录中。在Windows上,该目录的路径通常类似于:C:\Program Files\Java\jdk1.8.0_92\bin - Aerus
显示剩余4条评论
1个回答

12

这是命令:

<JDK_HOME>/jmap -F -dump:live,format=b,file=<file_name.hprof> <process_id>
你可以在这个命令中提及文件位置。

1
这是一个有效的答案,但你有任何想法为什么有时候会对某些进程 ID 失败吗?例如,我会收到以下错误信息:附加到进程 ID 23440,请稍候... 附加进程时出错:sun.jvm.hotspot.debugger.DebuggerException: 无法附加到进程 sun.jvm.hotspot.debugger.DebuggerException: sun.jvm.hotspot.debugger.DebuggerException: 无法附加到进程。 - murasing
2
我也遇到过这个问题。通常使用“-F”选项就可以解决。 - Arnab Biswas
1
是的,它确实被生成了,但你有什么想法为什么会出现这样的错误? - murasing
@murasing - 这是另一个问题,已经在这里提出:链接 - rustyx

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接