делает java 6, генерируют дамп потока в дополнение к дампу "кучи" (java_pid14941.hprof)
это - то, что произошло с одним из моих приложений.
java.lang. OutOfMemoryError: GC наверху ограничивает превышенную "кучу" Дампа java_pid14941.hprof...
Я действительно находил ava_pid14941.hprof в рабочем каталоге, но не нашел файла, который содержит дамп потока. Я должен знать то, что делали все потоки, когда я получил эту ошибку OutOfMemory.
Есть ли какой-либо параметр конфигурации, который генерирует дамп потока в дополнение к, сваливают дамп в кучу из исключения памяти?
Как сгенерировать Java-дамп потока при ошибке нехватки памяти?
Ваш вопрос можно упростить до:
и:
Так что на самом деле это довольно просто , вы можете сделать это так:
установите обработчик неперехваченных исключений по умолчанию
после перехвата неперехваченного исключения, проверьте, есть ли у вас OutOfMemoryError
, если у вас есть OutOfMemoryError, создайте себе полный дамп потока и либо спросите пользователь может отправить его вам по электронной почте или предложить отправить его автоматически
Бонус: он отлично работает и на 1.5:)
Thread.setDefaultUncaughtExceptionHandler( new Thread.UncaughtExceptionHandler() {
public void uncaughtException( final Thread t, final Throwable e ) {
...
}
Вы можете изучить это:
e.getMessage();
и это:
Thread.getAllStackTraces();
I ' m делает это все время в приложении, которое поставляется на сотнях различных JVM 1.5 и 1.6 (в разных ОС).
Я не думаю, что в java есть что-то, что могло бы предоставить вам дампы потоков на выходе. Я решаю эту проблему при необходимости с помощью cronjob, который периодически kill -3 pid
. Да, это немного загромождает журналы, но след все равно ничтожен.
И если вы страдаете от OOM, было бы полезно посмотреть, как ситуация развивается по потокам.
Если вы работаете в среде Linux / Unix, вы можете сделать это:
-XX:OnOutOfMemoryError="kill -3 pid"
Таким образом, вам не нужно заставлять ваше приложение генерировать периодические дампы потоков, и вы получите моментальный снимок, когда он действительно захлебнется.