Дамп ядра для процесса, порожденного из Java - PullRequest
2 голосов
/ 31 августа 2009

Мое Java-приложение (Eclipse) порождает дочерний процесс, отслеживая его поток stdout и значение выхода. Когда дочерний процесс аварийно завершает работу с SIGABRT, файл дампа основной памяти не создается. Если я запускаю дочерний процесс вручную и убиваю его, дамп ядра в порядке.

Я не смог найти информацию о том, готовит ли JVM каким-либо образом дочерний процесс (например, установил размер файла дампа основной памяти в 0).

Кто-нибудь знает, что может происходить и какие настройки изменить, чтобы создать дамп ядра?

Это на Suse 10 и Ubuntu 9.04, с Java 5 и 6, если это имеет значение.

С наилучшими пожеланиями, Влад

1 Ответ

3 голосов
/ 31 августа 2009

Обычно (не) создание файлов ядра контролируется командой ulimit (в частности, ulimit -c). Подробнее см. help ulimit (в bash).

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

Попробуйте установить ulimit в оболочке, затем запустите ваш Java-процесс оттуда. Если это не поможет, вы можете вызвать скрипт-обертку из Java, который устанавливает ulimit, а затем запустить вашу программу.

...