jhat抛出无法识别的魔法数字

时间:2013-03-19 18:00:50

标签: java jmap jhat

我正在尝试分析从遇到内存问题的java进程中获取的堆转储。转储是使用jmap获取的。我在转储文件上使用jhat - 我正在

java.io.IOException: Unrecognized magic number: 169897589 at com.sun.tools.hat.internal.parser.Reader.readFile(Reader.java:94) at com.sun.tools.hat.Main.main(Main.java:159)

jdk 1.6和1.7都给出了同样的错误。我在本地Windows机器上运行jhat(复制转储文件后),并在Linux服务器上获取转储文件。

任何想法我做错了什么?

2 个答案:

答案 0 :(得分:3)

如果您查看com.sun.tools.hat.internal.parser.Reader的源代码,您会看到它正在寻找幻数0x4a415641

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

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

答案 1 :(得分:1)

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

尝试

   jmap -dump:live;file=filename pid

祝你好运。