Пакет jdk.jfr
Определение событий
Flight Recorder собирает данные в виде событий. Событие имеет временную метку, длительность и, как правило, полезную для диагностики работающего приложения (до сбоя или аварийного завершения) нагрузочную часть, специфичную для приложения.
Чтобы определить событие Flight Recorder, расширьте Event и добавьте поля, соответствующие типам данных нагрузочной части. Метаданные о полях, такие как метки, описания и единицы измерения, могут быть добавлены с помощью аннотаций, доступных в пакете jdk.jfr, или с помощью пользовательской аннотации, имеющей аннотацию MetadataDefinition.
После определения класса события можно создавать его экземпляры (объекты события). Данные хранятся в событии путём присваивания данных полям. Временной режим события можно явно контролировать, используя методы begin и end, доступные в классе Event.
Сбор данных для хранения в событии может быть затратным. Метод Event.shouldCommit() можно использовать для проверки того, будет ли экземпляр события фактически записан в систему при вызове метода Event.commit(). Если Event.shouldCommit() возвращает false, тогда эти операции можно избежать.
Иногда структура полей события неизвестна во время компиляции. В этом случае событие можно определить динамически. Однако динамические события могут иметь не такую же производительность, как статически определенные, и инструменты могут не быть в состоянии идентифицировать и визуализировать данные без знания структуры.
Для динамического определения события используйте класс EventFactory и определите поля с помощью класса ValueDescriptor, а аннотации определите с помощью класса AnnotationElement. Используйте фабрику для выделения события и метод Event.set(int, Object) для его заполнения.
Управление Flight Recorder
Flight Recorder можно контролировать локально с помощью инструмента командной строки jcmd или удалённо с помощью интерфейса FlightRecorderMXBean, зарегистрированного в платформенном MBeanServer. Когда нужен прямой программно-ориентированный доступ, экземпляр Flight Recorder можно получить, вызвав FlightRecorder.getFlightRecorder(), а запись создать, используя класс Recording, в котором настраивается объём записываемых данных.
Настройки и конфигурация
Настройка состоит из пары имя/значение, где имя указывает событие и настройку для конфигурации, а значение — то, на что её установить.
Имя может быть сформировано следующими способами:
<event-name> + "#" + <setting-name>
или
<event-id> + "#" + <setting-name>
Например, чтобы установить интервал выборки события CPU Load один раз в секунду, используйте имя "jdk.CPULoad#period" и значение "1 s". Если несколько событий используют одно и то же имя, например, если класс события загружен в нескольких загрузчиках классов, и требуется их различие, то имя представляет собой "56#period". Идентификатор события получается путём вызова метода EventType.getId() и действителен для экземпляра виртуальной машины Java, в которой событие зарегистрировано.
Список доступных имён событий извлекается путём вызова FlightRecorder.getEventTypes() и EventType.getName(). Список доступных настроек для типа события получается путём вызова EventType.getSettingDescriptors() и ValueDescriptor.getName().
Предопределённые настройки
| Имя | Описание | Значение по умолчанию | Формат | Примеры значений |
|---|---|---|---|---|
enabled | Указывает, записывается ли событие | "true" | Строковое представление Boolean ("true" или "false") |
"true""false"
|
threshold | Указывает длительность, ниже которой событие не записывается |
"0" (нет ограничения) |
"0" если порог не используется, в противном случае строковое представление положительного Long, за которым следует пробел и одна из следующих единиц:
|
"0""10 ms""1 с" |
period | Указывает интервал, с которым событие испускается, если оно периодическое | "everyChunk" |
"everyChunk", если периодическое событие должно испускаться при каждой ротации файла, в противном случае строковое представление положительного значения Long с последующим пробелом и одной из следующих единиц:
|
"20 ms""1 s""everyChunk"
|
stackTrace | Указывает, записывается ли стек вызовов из метода Event.commit() | "true" | Строковое представление Boolean ("true" или "false") |
"true","false"
|
Обработка значений null
Все методы определяют, принимают ли они или возвращают null в Javadoc. Как правило, это выражается как "not null". Если параметр null используется там, где это не разрешено, выбрасывается java.lang.NullPointerException. Если параметр null передается методу, выбрасывающему другие исключения, такие как java.io.IOException, исключение java.lang.NullPointerException имеет приоритет, если только Javadoc метода явно не указывает, как null обрабатывается, т.е. путём выброса java.lang.IllegalArgumentException.
- Since:
- 9
| Класс | Описание |
|---|---|
| AnnotationElement | Описывает метаданные события, такие как метки, описания и единицы измерения. |
| BooleanFlag | Аннотация поля события, указывает, что значение является логическим флагом, значением true или false. |
| Category | Аннотация события, связывает тип события с категорией в формате удобочитаемого пути. |
| Configuration | Коллекция настроек и метаданных, описывающих конфигурацию. |
| ContentType | Мета-аннотация, указывает, что аннотация представляет тип содержимого, такой как временной интервал или частота. |
| DataAmount | Аннотация поля события, указывает, что значение представляет собой объем данных (например, байты). |
| Description | Аннотация, описывающая элемент с помощью одной или двух предложений. |
| Enabled | Аннотация события, определяет, должно ли событие быть включено по умолчанию. |
| Event | Базовый класс для событий, для определения событий и их полей требуется наследование. |
| EventFactory | Класс для определения события во время выполнения. |
| EventSettings | Удобный класс для применения настроек событий к записи. |
| EventType | Описывает событие, его поля, настройки и аннотации. |
| Experimental | Аннотация, указывающая, что элемент экспериментальный и может быть изменен без предварительного уведомления. |
| FlightRecorder | Класс для доступа, управления и обработки Flight Recorder. |
| FlightRecorderListener | Интерфейс обратного вызова для мониторинга жизненного цикла Flight Recorder. |
| FlightRecorderPermission | Разрешение для управления доступом к Flight Recorder. |
| Frequency | Аннотация поля события, указывает, что значение является частотой, измеряемой в Гц. |
| Label | Аннотация, устанавливающая удобочитаемое имя для элемента (например, "Maximum Throughput"). |
| MemoryAddress | Аннотация поля события, указывает, что значение является адресом памяти. |
| MetadataDefinition | Мета-аннотация для определения новых типов метаданных событий. |
| Name | Аннотация, устанавливающая имя элемента по умолчанию. |
| Percentage | Аннотация поля события для использования с дробями, обычно между 0.0 и 1.0, для указания того, что значение является процентом. |
| Period | Аннотация события, определяет значение по умолчанию для периодического события. |
| Recording | Предоставляет средства для настройки, запуска, остановки и выгрузки данных записи на диск. |
| RecordingState | Указывает состояние на жизненном цикле записи. |
| Registered | Аннотация события для программированного регистрации события. |
| Relational | Мета-аннотация для реляционных аннотаций, для использования на аннотации. |
| SettingControl | Базовый класс для расширения, чтобы создать элементы управления настройками. |
| SettingDefinition | Аннотация, указывающая, что метод в классе события должен использоваться для фильтрации событий. |
| SettingDescriptor | Описание настройки события. |
| StackTrace | Аннотация события, определяет, имеет ли событие по умолчанию стек-трейс или нет. |
| Threshold | Аннотация события, определяет длительность по умолчанию, ниже которой событие не записывается (например, "20 ms"). |
| Timespan | Аннотация поля события, указывает, что значение является длительностью. |
| Timestamp | Аннотация поля события, указывает, что значение является точкой во времени. |
| TransitionFrom | Аннотация поля события, указывает, что событие перешло с потока. |
| TransitionTo | Аннотация поля события, указывает, что событие скоро перейдет на поток. |
| Unsigned | Аннотация поля события, указывает, что значение имеет беззнаковый тип данных. |
| ValueDescriptor | Описывает поля события и элементы аннотаций. |
© 1993, 2023, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/21/docs/api/jdk.jfr/jdk/jfr/package-summary.html