【问题标题】:jhat throwing unrecognized magic numberjhat 抛出无法识别的幻数
【发布时间】:2013-03-08 13:45:48
【问题描述】:

我正在尝试分析从遇到内存问题的 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 服务器上获取的。

任何想法我做错了什么?

【问题讨论】:

  • 我们可以查看一些代码,以便我们了解您做错了什么吗?
  • 我的问题是关于抛出错误的 jhat - 我相信的问题不应该直接要求源代码。

标签: java jmap jhat


【解决方案1】:

如果您查看com.sun.tools.hat.internal.parser.Reader 的源代码,您会发现它正在寻找神奇的数字0x4a415641

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

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

【讨论】:

    【解决方案2】:

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

    试试

    jmap -dump:live;file=文件名 pid

    祝你好运。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-10-26
      • 1970-01-01
      • 2019-02-10
      • 1970-01-01
      • 1970-01-01
      • 2017-02-04
      • 1970-01-01
      相关资源
      最近更新 更多