Что может привести к тому, что файл hs_err_pid не будет создан при сбое? - PullRequest
14 голосов
/ 01 марта 2011

Мне нужно расследовать сбои клиентского приложения Java. Это приложение Swing, работающее в среде Java Web Start на Java SE 6 Update 23 в Windows. К сожалению, в некоторых случаях сбоя файл hs_err_pid не был создан. Его не было на рабочем столе, поэтому я искал его на ПК и не нашел его (на рабочем столе был старый файл hs_err_pid для того же приложения, поэтому разумно предположить, что новый должен быть создан там тоже). В конце нет никаких исключений в журнале, как это обычно случается, когда JVM падает на исключение Java, поэтому это похоже на сбой, который должен привести к созданию файла hs_err_pid.

Нужно ли что-то настраивать, чтобы это работало? Может ли конфигурация Dr. Watson повлиять на создание файла hs_err_pid?

Спасибо

Мы настроили Dr 'Watson и проанализировали файл дампа ядра, который был создан после того, как приложение снова упало. Ошибка, которую я увидел, была «Нарушение прав доступа». Из трассировки стека я смог увидеть, что сбой вызван исключением в нативном коде стороннего производителя, который мы используем. Этого было достаточно, чтобы делегировать проблему им.

Итог:
1. Некоторые сбои Java не обрабатываются JVM должным образом, поэтому файл hs_err_pid не создается.
2. Конфигурирование ОС для создания дампа ядра может помочь в этих случаях, поскольку сбой, который не обрабатывается JVM, будет обрабатываться ОС. В этом случае вы получите меньше информации, но это может быть полезно.

Ответы [ 3 ]

8 голосов
/ 30 ноября 2011

Если сбой происходит в результате собственного переполнения стека (обычно это приводит к SIGSEGV, когда приложение пытается прочитать / записать страницу защиты стека), файл hs_err_pid не создается на многих платформах (например, Linux), посколькупроцесс, который создает файл, не может быть завершен, если у вас недостаточно места в стеке.

6 голосов
/ 01 марта 2011

Обратите внимание, что hs_err_pid.log файлы создаются только в случае реального сбоя JVM.

Если ваше приложение «только» выходит из-за необработанного исключения где-либо, то такой файл не будет создан.

Вы уверены, что это был настоящий сбой JVM?

3 голосов
/ 01 марта 2011

JDK 5 http://java.sun.com/j2se/1.5/pdf/jdk50_ts_guide.pdf

When a fatal error occurs an error log is created in the file

hs_err_pid.log (где находится идентификатор процесса).По возможности файл создается в рабочем каталоге процесса.Если файл не может быть создан в рабочем каталоге (недостаточно места, проблема с правами доступа или другие проблемы), тогда файл создается во временном каталоге для операционной системы.В Solaris и Linux временным каталогом является / tmp.В Windows временный каталог определяется значением переменной среды TMP или, если оно не определено, значением переменной среды TEMP.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...