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.