Загрузка большого 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-битном режиме, и вы устанавливаете размер кучи достаточно большим.