Запросить дамп кучи Java (основной дамп) из приложения - PullRequest
12 голосов
/ 30 ноября 2009

Мне нужен способ запросить дамп кучи из приложения .

Обоснование: Когда я сталкиваюсь с определенной ошибкой, я хотел бы сбросить кучу, чтобы я мог видеть, что удерживает память.

Но я бы хотел автоматизировать это (например, когда я обнаружил, что произошло какое-то конкретное состояние. Или когда сторожевой таймер больше не получает свои сигналы. Когда какой-то тест не пройден). Таким образом, мне нужен способ вывести кучу изнутри самого приложения. Я не могу найти это с вещами MX-бобов. Хотя MX Beans может давать очень хорошие трассировки стека с информацией о мониторе и "собственном синхронизаторе", сведениях о взаимоблокировке и конфликтах, я не могу найти способ запросить дамп кучи. Есть ли такой способ? Или каким-то косвенным способом, например, как эти вещи JVisualVM делают это? И можно сказать, что JVM выгрузит ядро ​​на OutOfMemoryExceptions ..?

Ответы [ 2 ]

16 голосов
/ 30 ноября 2009

Если этого недостаточно, чтобы выгрузить кучу на OutOfMemoryError, есть способ, зависящий от HotSpot, программно выгрузить кучу из приложений Java , если все в порядке.

4 голосов
/ 30 ноября 2009

Как насчет использования опции виртуальной машины -XX:+HeapDumpOnOutOfMemoryError, чтобы сообщить виртуальной машине HotSpot создать дамп кучи, когда ей не хватает памяти?

...