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 дают одинаковую ошибку. Я запускаю jhat на моей машине с Windows локально (после копирования файла дампа), а файл дампа был взят на сервере Linux.

Есть идеи, что я делаю не так?

3 ответа

Решение

Если вы посмотрите на исходный код com.sun.tools.hat.internal.parser.Reader, вы увидите, что он ищет магическое число 0x4a415641.

Это значение используется для определения допустимых файлов дампа кучи. jmap следует добавить это значение в качестве первых четырех байтов любого файла дампа кучи, который он создает.

Я бы предложил открыть дамп кучи в шестнадцатеричном редакторе и проверить, являются ли первые четыре байта 0x4a415641, Проверьте это для файла на вашем компьютере с Linux и Windows. Возможно файл поврежден при передаче файла.

Возможно, у вас неправильный способ создания файла дампа jvm. ошибка возникает при использовании jmap -histo {pid} > dump.log.

пытаться

   jmap -dump:live;file= pid имени файла

Удачи.

Скорее всего, вы предоставляете инструменту jhat zip-файл (.gz или .tar.gz). Вот почему он не может проверить заголовок hprof. Недавно столкнулся с такой же ситуацией. Мой дамп кучи был захвачен на сервере Linux в формате .tar.gz, и я предоставил его как есть, чтобы получить ту же ошибку, что и вы. После распаковки файла jhat смог проанализировать файл .hprof.

Другие вопросы по тегам