Как понять ошибки Java Hotspot - PullRequest
8 голосов
/ 12 мая 2009

Парни, когда сбой JVM записывает журнал ошибок hs_err_pid.log. Я хочу выяснить, что стало причиной сбоя JVM? Как понять эти Журналы, документировано ли где-либо о том, как устроен этот Журнал. Я пытался искать в сети, но безрезультатно: - (

Указание на соответствующие URL будет оценено. Спасибо.

Ответы [ 3 ]

5 голосов
/ 12 мая 2009

Если вы не вызываете собственный код (JNI), ничто в вашем коде не должно вызывать сбой JVM; поэтому информация трассировки стека в этом файле журнала, вероятно, не очень полезна для большинства разработчиков. Вероятно, поэтому он не может быть задокументирован (по крайней мере, внешне). Поэтому, вероятно, лучше всего подать отчет об ошибке, как указано в сообщении об ошибке.

Но, если вы действительно хотите это понять, Блог Kohsuke имеет товар. По-прежнему. :)

0 голосов
/ 12 мая 2009

это довольно полезно: http://weblogs.java.net/blog/kohsuke/archive/2009/02/crash_course_on.html

хорошо, первый ответ уже упоминает этот URL, не важно

0 голосов
/ 12 мая 2009

Для начала найдите самую верхнюю строку, которая выглядит примерно как "ntdll.dll + 0x2000".

Если горячая точка встречается в вашем собственном коде (т. Е. DLL - одна из ваших), то узнайте, как убедить ваш компилятор составить список сопоставлений из смещения DLL в номер строки. Очевидно, это может означать, что вам нужно перезапустить вновь скомпилированную DLL и подождать, пока проблема не возникнет снова.

В противном случае посмотрите, вызывает ли поиск этой конкретной строки в Google что-то, учитывая, что та же самая ошибка может означать целый ряд вещей. И посмотрите, выглядит ли имя DLL как-то узнаваемое, например, имя драйвера принтера, графического драйвера или другого компонента, который можно отследить до определенного вызова. Каким бы ни был этот компонент, вы можете обновить его до фиксированной версии или избежать звонка. Если вы не уверены, что это за компонент, возможно, вам просто нужно обновить «JVM» - обновление, по крайней мере, до последней версии обновления / минорной версии любой версии, на которой вы работаете, вероятно, является хорошей идеей.

В прошлом я также видел ошибки в JIT-компиляторе, которые можно временно устранить, сказав, что они не должны пытаться скомпилировать конкретный метод, о котором идет речь - как я смутно помню, в этих случаях ошибка горячей точки дает некоторые понять, какой это был метод (возможно, просто дамп стека Java), но у меня нет примера, чтобы вспомнить детали.

...