2013-03-03 2 views
2

Я знаю, что -XX:+HeapDumpOnOutOfMemoryError включит сброс кучи на OutOfMemoryError.Как сделать свалку потока по ошибке из памяти

Есть ли что-нибудь подобное для свалки нитей? Мне нужно это в случае, если на сервере возникает ошибка: у меня нет доступа к самому процессу, когда это происходит

+0

Вы можете использовать VisualVM для создания HeapDump, более новые версии Java имеют его на борту, посмотрите на bin/folder. –

+0

В Unix SIGQUIT (отправляется с командой kill или набрав Ctrl- \ в консоли программы) выгружает трассировки стека всех потоков. В Windows это сделает Ctrl-Break в консоли программы. – VGR

ответ

2

Точная точка исполнения, при которой возникает OutOfMemoryError, очень случайна (если только у вас нет однопоточного приложения) , поэтому я не думаю, что было бы слишком много смысла, чтобы получить дамп потока в OOM. По крайней мере, это верно, если это «пространство кучи Java» типа OOM, но, вероятно, для других видов ошибок OOM.

В любом случае, взгляните на this older post, обратившись к тому же вопросу.

Однако лучший способ справиться с ошибкой OOM состоит в том, чтобы использовать Eclipse Memory Analyzer Tool для проверки heapdump. Это помогает идентифицировать утечки памяти, преобразуя граф объектов в так называемый dominator tree. Эта структура раскрывает зависимости между живыми объектами, поэтому становится очень легко идентифицировать тех, кто отвечает за сохранение самых больших блоков памяти (см. Shallow vs. Retained Heap).

+0

Спасибо за ссылку. Мы используем сервисную оболочку, и для этого я нашел настройки конфигурации. В противном случае я бы пошел с решением обработчика исключений. –

+0

«Предыдущее сообщение» выше предлагает: -XX: OnOutOfMemoryError = «kill -3% p» – vorburger