Запросить дамп кучи Java (основной дамп) из приложения

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

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

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

2 ответа

Решение

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

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

Другие вопросы по тегам