Запросить дамп кучи Java (основной дамп) из приложения
Мне нужен способ запросить дамп кучи из приложения.
Обоснование: когда я сталкиваюсь с конкретным состоянием ошибки, я хотел бы сбросить кучу, чтобы я мог видеть, что удерживает память.
Но я хотел бы автоматизировать это (например, когда я обнаруживаю, что произошло какое-то конкретное состояние. Или когда сторожевой таймер больше не получает пинг. Когда какой-то тест не пройден). Таким образом, мне нужен способ выгрузить кучу изнутри самого приложения. Я не могу найти это с вещами MX-бобов. Хотя MX Beans может давать очень хорошие трассировки стека с информацией о мониторе и "собственном синхронизаторе", сведениях о взаимоблокировке и конфликтах, я не могу найти способ запросить дамп кучи. Есть ли такой способ? Или каким-то косвенным способом, например, как эти вещи JVisualVM делают это? И кто-то может сказать JVM сбросить ядро на OutOfMemoryExceptions..?
2 ответа
Если этого недостаточно, чтобы свалить кучуOutOfMemoryError
есть зависящий от HotSpot способ программно выгружать кучу из Java-приложений, если это нормально.
Как насчет использования опции VM -XX:+HeapDumpOnOutOfMemoryError
сказать виртуальной машине HotSpot генерировать дамп кучи, когда ей не хватает памяти?