Вопрос. Как можно бороться с OutOfMemoryError? Поставил ключи DXX:+HeapDumpOnOutOfMemoryError и -DXX:HeapDumpPath=D:\dumps, но дамп не создаётся. В hs_err_pid<>.log файле есть сообщение Failed to write core dump. В связи с этим вопросы:
1. Как можно использовать информацию из hs_err_pid<>.log файла
(
Read more... )
Comments 18
Reply
Reply
А памяти действительно хватает? Там же, кроме -Xmx и -Xss на каждый thread, и class cache и т.п. В общем, много overhead'а...
Reply
Reply
К тому же, сразу после запуска можно посмотреть, сколько ресурсов осталось с большей точностью...
Reply
Попробуйте запускать проблемную программу с текущим каталогом, в который можете писать (и который лежит в файловой системе с достаточным объемом свободного пространства)
Reply
Reply
Reply
Reply
Reply
Reply
Если флага нет, то это похоже на jvm crash, а не на крэш приложения.
JVM вам может создать heap dump в котором записаны все объекты из jvm-кучи и которые потом можно проинспектировать в visualvm. А может создать core dump к которому под линуксом можно подключить gdb/что-то_под_win и посмотреть какие трэды где были и тп но в visualvm его уже не загрузить.
"Failed to write core dump" - это не про хип дамп а про core который имеет смысл смотреть если падает jvm или нативная библиотека.
Возвращаемся к heap dump, чтобы его получить нужно флаги -XX:HeapDumpPath=. -XX:+HeapDumpOnOutOfMemoryError без всяких "-D". Флаги -D это для приложения, флаги -X и -XX для jvm.
В stdout ваш процесс что-нибудь пишет? Например если сделать вот такое:
byte[] data = new byte[1<<30];
и массив больше кучи то в stdout/err оно должно написать:
java.lang.OutOfMemoryError: Java heap space ( ... )
Reply
Reply
Leave a comment