Есть ли способ проанализировать усеченный дамп кучи Java (файл hprof)?
В моей работе мы сталкиваемся с трудной для воспроизводства проблемой ООМ. Или, точнее, это очень легко воспроизвести в одной системе, что делает эту систему непригодной для использования, но трудно воспроизвести в любом другом месте, учитывая те же входные данные.
Приложение запускается как служба с использованием оболочки службы. Нам удалось изменить конфигурацию, чтобы запустить ее с возможностью вывода файла дампа кучи в OOM, но, к сожалению, они были усечены, скорее всего из-за истечения времени ожидания оболочки службы и остановки процесса при его записи в файл. Это очевидно, поскольку максимальный объем памяти равен 1 ГБ, а файлы hprof составляют всего 700 МБ, что слишком мало для всей кучи OOM.
Потребовалось бы много перепрыгнуть через обручи, чтобы дополнительно настроить оболочку, чтобы дать процессу java больше времени для записи кучи, но мы добиваемся этого, используя следующие 2 варианта:
wrapper.jvm_exit.timeout=600
wrapper.shutdown.timeout=600
Вопрос в том, могу ли я сделать что-нибудь полезное с усеченными файлами hprof, которые у меня есть? Eclipse MAT задыхается от них. Jhat, кажется, загружает их, но затем показывает только 3 экземпляра Java. Объект размера 0 и ничего больше. Я попробовал YourKit, и он не смог записать свой файл oids.
Мне кажется, эти файлы должны содержать полезную и доступную информацию. Есть ли инструмент, который может прочитать, что там?
Спасибо за ваше время!
2 ответа
Лучший вариант для анализа файла дампа, с которым я сталкивался до даты, - это текстовые редакторы, такие как vim.
Используйте Jpofiler ( https://www.ejtechnologies.com/products/jprofiler/overview.html). Это не бесплатно, но у нее есть пробный период.
Варианты просмотра оперативной памяти и процессора - ваш лучший выбор, чтобы изолировать ваши проблемы. Обычно он работает достаточно хорошо даже на больших свалках.