Jim*_*ans 4 java eclipse jconsole heap-dump
那真是令人尴尬......
我开始使用Eclipse Memory Analyzer来查找Windows机器上的Java内存泄漏.第1步是获取堆转储文件.为此,我从Eclipse中启动Java(javaw.exe)进程并使用jconsole连接到它.然后在jconsole MBeans选项卡上单击dumpHeap按钮.我第一次这样做时,我看到一个弹出窗口说它创建了堆转储文件,但没有给出它的名称或位置.现在每当我连接到不同的javaw.exe进程时再次执行dumpHeap时,jconsole说:
Problem invoking dumpHeap : java.io.IOException: File exists
Run Code Online (Sandbox Code Playgroud)
当然不会给出它的名字或路径.它可能在哪里?
我搜索了我的C:驱动器(使用cygwin命令行工具)来查找包含"hprof"或"java_pid"或"heapdump"的文件,但没有找到任何合理的信息.我甚至使用Windows搜索来查找我的Eclipse工作区中在最后一天发生了变化的所有文件.
我正在使用Sun Java 1.6 JVM,并且没有设置-XX:HeapDumpPath.
更新(2010年4月28日):我的原始堆文件位置必须由jconsole确定,我从该工具触发了堆转储.JVM的堆转储位置必须仅应用于它触发的堆转储(例如,在OutOfMemoryException上).
Matt B建议使用jvisualvm很好地解决了我的问题,指向一个更有用的旧jconsole替代品.它有一个很好的内存分析器,可以显示哪些类型的对象数量最多并且占用的内存最多.它有一个监视器,显示实际内存使用情况.当你要求它进行堆转储时,它甚至会告诉你文件名!Eclipse Memory Analyzer为您提供完整的详细信息.