Java jhat抛出无法识别的幻数

Java jhat抛出无法识别的幻数,java,jmap,jhat,Java,Jmap,Jhat,我试图分析一个java进程的堆转储,该进程遇到内存问题。转储是使用jmap获取的。我在转储文件上使用jhat-我得到 java.io.IOException:无法识别的幻数:169897589 位于com.sun.tools.hat.internal.parser.Reader.readFile(Reader.java:94) 在com.sun.tools.hat.Main.Main(Main.java:159) JDK1.6和1.7都给出了相同的错误。我正在本地Windows计算机上运行jha

我试图分析一个java进程的堆转储,该进程遇到内存问题。转储是使用jmap获取的。我在转储文件上使用jhat-我得到

java.io.IOException:无法识别的幻数:169897589
位于com.sun.tools.hat.internal.parser.Reader.readFile(Reader.java:94)
在com.sun.tools.hat.Main.Main(Main.java:159)

JDK1.6和1.7都给出了相同的错误。我正在本地Windows计算机上运行jhat(复制转储文件后),转储文件是在Linux服务器上获取的


你知道我做错了什么吗?

如果你看一下源代码,你会发现它在寻找神奇的数字

此值用于帮助识别有效的堆转储文件
jmap
应将此值作为它创建的任何堆转储文件的前四个字节追加


我建议在十六进制编辑器中打开堆转储并检查前四个字节是否为
0x4a415641
。在Linux和Windows计算机上检查此文件。当您传输文件时,文件可能已损坏。

可能是您使用了错误的方法来生成jvm转储文件。 使用jmap-histo{pid}>dump.log时发生错误

试一试

jmap-dump:live;file=文件名pid
祝你好运。

我们能看一些代码吗?这样我们就可以知道你做错了什么?我的问题是关于jhat抛出错误的问题-我相信这个问题不应该直接需要源代码。 jmap -dump:live;file=filename pid