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.
Тестирование
Чтобы проверить работу этого кода, потребуется вызывать сбои в различных контекстах, поэтому на первых порах, возможно, придётся вызывать сбои принудительно.