Загрузка большого hprof в jhat

У меня есть файл Hprof объемом 6,5 ГБ, который был выгружен 64-разрядной JVM с помощью -XX:-HeapDumpOnOutOfMemoryError вариант. Он у меня установлен на 16-битной 64-битной машине, и я пытаюсь перевести его в jhat, но памяти не хватает. Я попытался передать аргументы jvm для минимальных настроек, но он отклоняет любой минимум и, кажется, не хватает памяти, прежде чем достичь максимума.

Кажется глупым, что у jvm, заканчивающегося из памяти, появляется куча, настолько большая, что ее нельзя загрузить в коробку с вдвое большим количеством оперативной памяти. Есть ли способы запустить это или, возможно, амортизировать анализ?

4 ответа

Решение

Я бы взглянул на анализатор памяти затмения. Этот инструмент великолепен, и я посмотрел несколько куч Gig с этим инструментом. Хорошая вещь об инструменте - это то, что он создает индексы в дампе, поэтому он не все в памяти одновременно.

Используйте эквивалент jhat -J-d64 -J-mx16g myheap.hprof как команда для запуска jhat, то есть она запустит jhat в 64-битном режиме с максимальным размером кучи 16 гигабайт.

Если JVM на вашей платформе по умолчанию работает в 64-битном режиме, то -J-d64 Вариант должен быть ненужным.

Мне пришлось загрузить файл hprof объемом 11 ГБ, и я не смог с анализатором памяти Eclipse. В итоге я написал программу, уменьшающую размер файла hprof путем случайного удаления информации об экземпляре. Как только я уменьшил размер файла hprof до 1 ГБ, я мог открыть его с помощью анализатора памяти Eclipse и получить представление о том, что вызывало утечку памяти.

Какие флаги вы передаете Jhat? Убедитесь, что вы находитесь в 64-битном режиме, и вы устанавливаете размер кучи достаточно большим.

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