Зазвичай те, що я використовую, ParseHeapDump.sh
входить до складу Eclipse Memory Analyzer і описується тут , і я роблю це на одному з наших більш посилених серверів (завантажую та копіюю через дистрибутив Linux .zip, розпаковую там). Сценарію оболонки потрібно менше ресурсів, ніж розбір купи з графічного інтерфейсу, а також ви можете запустити його на своєму мускулистому сервері з більшою кількістю ресурсів (ви можете виділити більше ресурсів, додавши щось на зразок -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.
Після створення індексів я намагаюся згенерувати з них звіти та обмінювати ці звіти на свої локальні машини і намагаюся зрозуміти, чи можу я знайти винуватця саме за цим (не лише звіти, а не індекси). Ось підручник зі створення звітів .
Приклад звіту:
./ParseHeapDump.sh ../today_heap_dump/jvm.hprof org.eclipse.mat.api:suspects
Інші варіанти звіту:
org.eclipse.mat.api:overview
і org.eclipse.mat.api:top_components
Якщо цих звітів недостатньо, і якщо мені потрібно ще копати (тобто, скажімо, через oql), я сканую індекси, а також файл hprof на свою локальну машину, а потім відкриваю дамп купи (з індексами в тому ж каталозі, що і дамп купи) з моїм графічним інтерфейсом Eclipse MAT. Звідси для роботи не потрібно занадто багато пам'яті.
EDIT:
Мені просто сподобалось додати дві нотатки:
- Наскільки мені відомо, лише генерація індексів є інтенсивною частиною пам'яті Eclipse MAT. Після того, як ви отримаєте індекси, більшій частині вашої обробки з Eclipse MAT не знадобиться стільки пам'яті.
- Робити це на сценарії оболонки означає, що я можу це робити на безголовому сервері (і зазвичай я це роблю також на безголовому сервері, оскільки вони, як правило, найпотужніші). І якщо у вас є сервер, який може генерувати дамп купи такого розміру, швидше за все, у вас є інший сервер, який також може обробити таку велику кількість дампа купи.
ArrayIndexOutOfBoundsException
Особливості в по крайней мере двох помилок . Я заявляю це, оскільки ви не повідомляли про OOME під час запуску MAT, який має інше виправлення .