Инструмент для анализа больших дампов кучи Java
у меня есть дамп кучи JVM HotSpot, который я хотел бы проанализировать. Виртуальная машина работала с -Xmx31g
, и файл дампа "кучи" составляет 48 ГБ.
- Я даже не буду пытаться
jhat
, так как для этого требуется примерно в пять раз больше памяти кучи (это было бы 240 ГБ в моем случае) и ужасно медленно. - Eclipse MAT падает с
ArrayIndexOutOfBoundsException
после анализа дампа кучи в течение нескольких часов.
какие инструменты доступны для этой задачи? Набор инструментов командной строки было бы лучше, если бы он состоял из одной программы, которая преобразует дамп кучи в эффективные структуры данных для анализа, в сочетании с несколькими другими инструментами, которые работают с предварительно структурированными данными.
1 ответ:
обычно я использую
ParseHeapDump.sh
входит в Анализатор Памяти Eclipse и описано здесь, и я делаю это на одном из наших более усиленных серверов (скачать и скопировать через linux .молния дистрибутив, распаковать там). Сценарий оболочки требует меньше ресурсов, чем разбор кучи из GUI, плюс вы можете запустить его на своем мощном сервере с большим количеством ресурсов (вы можете выделить больше ресурсов, добавив что-то вроде-vmargs -Xmx40g -XX:-UseGCOverheadLimit
до конца последней строки скрипта. Для например, последняя строка этого файла может выглядеть так после модификации./MemoryAnalyzer -consolelog -application org.eclipse.mat.api.parse "$@" -vmargs -Xmx40g -XX:-UseGCOverheadLimit
запустить его как
./path/to/ParseHeapDump.sh ../today_heap_dump/jvm.hprof
после этого успешно, он создает ряд "индексных" файлов рядом с ним .hprof файл.
после создания индексов, я стараюсь