Как надежно взять Дампы "кучи" Java?

Хорошо, таким образом с помощью общих комментариев в качестве начальной точки я придумал эту глупую путаницу :-)...

{ 
    sleep 5; 
    echo 'ehlo';
    sleep 3;
    echo 'MAIL FROM:<Test@test.com>';
    sleep 3; 
    echo 'RCPT TO: <kyle@test_dest.com>';
    sleep 3;
    echo 'DATA';
    sleep 3;
    echo -e 'To:kyle@testdest.com\nMIME-Version: 1.0 (mime-construct 1.9)\nContent-Type: application/zip\nContent-Transfer-Encoding: base64\n\n';
    dd if=/dev/urandom bs=4 count=10 2>/dev/null | openssl base64;
    echo '.';
} | telnet mx1.testdest.com 25
9
задан 6 February 2010 в 06:42
5 ответов

у нас есть JSP, который запрашивает ManagementFactory.getThreadMXBean () и представляет отчет. Может не быть полезным, когда приложение отказало, но если Вы будете опрашивать каждую минуту или так, то Вы поймете то, что происходит.

Более подробная информация.

2
ответ дан 2 December 2019 в 22:27

Вы могли контролировать свое приложение через jmx с внешней стороны. когда Вы знаете некоторые метрики, которые указывают на предстоящий OutOfMemory, Вы могли инициировать jmap, выполненный, прежде чем исключение будет выдано.

2
ответ дан 2 December 2019 в 22:27
  • 1
    Спасибо христианин - jmap, более вероятно, будет надежен перед ошибкой, брошено? –  karlcyr 6 February 2010 в 23:22
  • 2
    jmap будет все еще требоваться некоторое время для получения Вас дамп "кучи". но Вы получите полный heapdump, пока Ваш jvm/tomcat главным образом ответственен. –  Christian 7 February 2010 в 12:05
  • 3
    Я думаю, что самый чистый и самый легкий инструмент делает, это - " Визуальный VM". это могло бы быть вне объема, но создание пользовательского плагина для VisualVM, который обнаруживает условие и берет автоматический дамп из VisualVm, было бы потрясающим, по моему скромному мнению. –  djangofan 7 April 2010 в 20:53

Который является Вашей операционной системой? (Я не могу добавить комментарии).

Для Соляриса мы получаем лучшие результаты, сначала вызывая дамп ядра (gcore <pid>) и затем присоединяя jmap в файл дампа ядра (jmap -heap:format=b <path to java bin> <path to core>)

gcore *, отклоняют утилиту для генерации изображения под управлением программы. См. ссылку.

7
ответ дан 2 December 2019 в 22:27
  • 1
    попробованный это gdb на Linux и это работает отлично. –  Christian 25 March 2010 в 12:17

Благодаря Вам всем для Ваших предложений.

Что мы волновали, выполнение пишет сценарий для активного контроля журналов сборки "мусора". По нашему опыту, последовательный Полный GC почти всегда предшествуют OOM, таким образом, наш сценарий обнаруживает это событие, корректно удаляет сервер из пула выравнивания нагрузки и вызывает дамп "кучи". Это значительно увеличило нашу эффективность.

2
ответ дан 2 December 2019 в 22:27

Это довольно старый вопрос, но я дам ответ с надеждой, что кто-то сочтет это полезным.

jmap имеет параметр -F (принудительно). В прошлом для меня это не сработало. Если вы хотите использовать параметр -F, я бы рекомендовал вам также указать каталог java.io.tmp как часть команды jmap. Возникла проблема с JVM версии 1.6.22, когда утилита jmap не работала должным образом из-за настройки временного каталога.

Вы также можете попытаться получить дамп ядра через gdb. Когда у вас есть ядро, jmap может преобразовать его в дамп кучи.

2
ответ дан 2 December 2019 в 22:27

Теги

Похожие вопросы