openjdk.ruOpenJDK на русском

JEP 146: Improve Fatal Error Logs

Улучшение журналов фатальных ошибок

ОтветственныйTom Rodriguez
ТипFeature
ОбластьImplementation
СтатусClosed / Withdrawn
Компонентhotspot / runtime
Обсуждениеhostspot dash dev at openjdk dot java dot net
ТрудоёмкостьS
ДлительностьS
РецензентыJesper Wilhelmsson
ОдобренMikael Vidstedt
Создан2011/11/09 20:00
Обновлён2018/03/22 18:31
Задача8046136

Аннотация

Улучшить журналы фатальных ошибок HotSpot, то есть файлы hs_err: добавить в них дополнительную информацию об истории работы, а также некоторую информацию, зависящую от контекста.

Мотивация

Журналы фатальных ошибок — важнейший инструмент для первичного разбора ошибок. Если добавить в них больше полезной информации, ошибки, возможно, удастся оценивать быстрее.

Описание

В рамках этого проекта появился набор классов, в которых хранится информация, записываемая в аварийный дамп при сбое.

EventLog — базовый класс для вывода журнала событий, который регистрируется для вывода в момент сбоя. EventLog — очень общий интерфейс, который обычно не следует использовать напрямую: его используют через подклассы.

EventLogBase — шаблонный подкласс EventLog, который реализует базовую функциональность кольцевого буфера. Большинство журналов событий должны наследоваться от него и, возможно, реализовывать более функциональный метод записи в журнал, если существующая семантика копирования не подходит. Заданное имя используется как метка журнала при его выводе во время сбоя.

В аварийный дамп добавлена, например, информация о недавней истории компиляции и сборки мусора. Информация, зависящая от контекста, включает, например, то, какой байт-код обрабатывается и как выглядит дерево встраивания, если сбой происходит во время компиляции.

Для управления журналом событий добавлены два новых флага:

-XX:LogEvents={true/false} Включает различные журналы событий на основе кольцевого буфера. По умолчанию true.

-XX:LogEventsBufferEntries=n Задаёт размер кольцевого буфера. По умолчанию 10.

Тестирование

Чтобы проверить работу этого кода, потребуется вызывать сбои в различных контекстах, поэтому на первых порах, возможно, придётся вызывать сбои принудительно.