Инструмент для анализа больших дампов кучи Java


у меня есть дамп кучи JVM HotSpot, который я хотел бы проанализировать. Виртуальная машина работала с -Xmx31g, и файл дампа "кучи" составляет 48 ГБ.

  • Я даже не буду пытаться jhat, так как для этого требуется примерно в пять раз больше памяти кучи (это было бы 240 ГБ в моем случае) и ужасно медленно.
  • Eclipse MAT падает с ArrayIndexOutOfBoundsException после анализа дампа кучи в течение нескольких часов.

какие инструменты доступны для этой задачи? Набор инструментов командной строки было бы лучше, если бы он состоял из одной программы, которая преобразует дамп кучи в эффективные структуры данных для анализа, в сочетании с несколькими другими инструментами, которые работают с предварительно структурированными данными.

1 60

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 файл.

после создания индексов, я стараюсь