嗯,这是令人尴尬的......使用jconsole时Java转储堆文件的位置?
我开始玩Eclipse Memory Analyzer来查找Windows盒子上的Java内存泄漏。第1步是获取堆转储文件。为此,我从Eclipse内启动我的Java(javaw.exe)进程,并使用jconsole连接到它。然后在jconsole MBeans选项卡上单击dumpHeap按钮。我第一次做到这一点时,看到一个弹出窗口说它创建了堆转储文件,但没有给出它的名称或位置。现在,每当我再次做了dumpHeap同时连接到不同的javaw.exe进程,JConsole的说:
Problem invoking dumpHeap : java.io.IOException: File exists
当然,不给它的名称或路径。它在哪里?
我搜索了我的C:驱动器(使用cygwin命令行工具)包含“hprof”或“java_pid”或“heapdump”的文件,但没有发现任何可能的东西。我甚至使用Windows搜索来查找Eclipse工作区中所有在最后一天发生更改的文件。
我正在使用Sun Java 1.6 JVM,并且没有-XX:HeapDumpPath集。
更新(2010年4月28日):我的原始堆文件位置必须由jconsole确定,我从中触发了堆转储。 JVM的堆转储位置必须仅适用于它触发的堆转储(例如,在OutOfMemoryException上)。
马特B的建议,使用jvisualvm很好地解决了我的问题,指向我一个更有用的老jconsole替代品。它有一个很好的内存分析器,可以显示哪些类型的对象数量最多且内存最多。它有一个显示器,显示随着时间的推移实际使用的内存。当你问它堆转储时,它甚至会告诉你文件名! Eclipse Memory Analyzer为您提供完整的详细信息。
尝试jvisualvm,它有一个更好的接口 – 2010-04-28 01:07:51
IDEs真的有用,直到他们不 – 2010-04-28 07:38:44
@matt b:你是绝对正确的,它甚至告诉我文件名后堆转储! C:\ DOCUME〜1 \ ferrans \ LOCALS〜1 \ Temp \ visualvm.dat \ localhost-4180 \ heapdump-1272470561431.hprof添加这个答案,我会接受它。 – 2010-04-28 16:06:46