Есть ли способ анализа усеченного дампа Java Heap (hprof file)?

В моей работе мы сталкиваемся с трудностями в воспроизведении проблемы OOM. Или, точнее, его очень легко воспроизвести на одной системе, что делает эту систему непригодной, но трудно воспроизвести где-либо еще, учитывая те же самые входы.

Приложение запускается как служба, используя служебную оболочку. Нам удалось изменить конфигурацию, чтобы запустить его с возможностью вывода файла дампа кучи в OOM, но, к сожалению, они были усечены, скорее всего, из-за тайм-аута оболочки службы и уничтожения процесса, когда он написал файл. Это легко понять, так как максимальная память установлена ​​в 1 ГБ, а файлы hprof имеют размер 700 МБ, что слишком мало, чтобы быть полной кучей в OOM.

Для дополнительной настройки обертки потребуется много переходов, чтобы дать java-процессу больше времени для выписки кучи, но мы преследуем это, используя эти 2 варианта:

wrapper.jvm_exit.timeout=600
wrapper.shutdown.timeout=600

Вопрос в том, есть ли что-нибудь полезное, которое я могу сделать с усеченными файлами hprof, которые у меня есть? Eclipse MAT задыхается от них. Jhat, похоже, загружает их, но затем показывает только 3 экземпляра Java.Object размера 0 и ничего больше. Я попробовал YourKit и не смог записать файл Oids.

Мне кажется, что эти файлы должны иметь в них полезную и доступную информацию. Есть ли инструмент, который может читать что там?

Спасибо за ваше время!

Ответ 1

Лучший вариант для анализа файла дампа, с которым я сталкивался до даты, - текстовые редакторы, такие как vim.

Ответ 2

Используйте Jpofiler (https://www.ejtechnologies.com/products/jprofiler/overview.html). Это не бесплатно, но у него есть пробный период.

Параметры живой памяти и просмотра процессора - ваш лучший выбор, чтобы изолировать ваши проблемы. Он обычно хорошо работает даже на больших отвалах.