Eclipse内存分析器 - 尝试获取堆转储时出错

问题描述:

我正在尝试使用Eclipse内存分析器工具(MAT)获取堆转储。我运行了Weblogic 10.3应用程序服务器。这是一个安装了32位Java的Windows XP操作系统。当我尝试使用MAT获取堆运行Weblogic进程的堆转储时,出现以下错误:Eclipse内存分析器 - 尝试获取堆转储时出错

Error creating heap dump. jmap exit code = 1 
Exception in thread "main" java.io.IOException: Premature EOF 
    at sun.tools.attach.HotSpotVirtualMachine.readInt(HotSpotVirtualMachine.java:226) 
    at sun.tools.attach.WindowsVirtualMachine.execute(WindowsVirtualMachine.java:88) 
    at sun.tools.attach.HotSpotVirtualMachine.executeCommand(HotSpotVirtualMachine.java:195) 
    at sun.tools.attach.HotSpotVirtualMachine.dumpHeap(HotSpotVirtualMachine.java:162) 
    at sun.tools.jmap.JMap.dump(JMap.java:224) 
    at sun.tools.jmap.JMap.main(JMap.java:122) 

Error creating heap dump. jmap exit code = 1 
Exception in thread "main" java.io.IOException: Premature EOF 
    at sun.tools.attach.HotSpotVirtualMachine.readInt(HotSpotVirtualMachine.java:226) 
    at sun.tools.attach.WindowsVirtualMachine.execute(WindowsVirtualMachine.java:88) 
    at sun.tools.attach.HotSpotVirtualMachine.executeCommand(HotSpotVirtualMachine.java:195) 
    at sun.tools.attach.HotSpotVirtualMachine.dumpHeap(HotSpotVirtualMachine.java:162) 
    at sun.tools.jmap.JMap.dump(JMap.java:224) 
    at sun.tools.jmap.JMap.main(JMap.java:122) 

任何帮助表示赞赏。

感谢, 希德

有一两件事你可以尝试使用jmap保存转储和MAT打开它。

使用jps来获取进程ID(PID)。

jmap -dump:live,format=b,file=myfile.hprof <processid-from-above> 
+0

感谢您的回复。但jmap在Windows上不起作用。我尝试过使用jConsole,但即使这样也会出现问题。有没有其他方法可以获得实时堆转储? – Sid 2011-05-18 20:56:15

+1

您可以尝试VisualVM或jVisualVM。一个来自Java,另一个是单独下载。 – karmakaze 2011-05-18 21:07:40

+1

为了将来的参考,JMap可以在Windows中工作,并包含在JDK> 1.5(我认为)中。您需要安装JDK,而不仅仅是JRE(JDK是“开发工具包”并且有额外的工具)。然后,您必须导航到JDK安装的'bin'以运行'jmap'。 – Ben 2012-01-12 02:45:57