Пакет 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 Virtual Machine, в котором зарегистрировано событие.
Список доступных имен событий извлекается путем вызова 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, 2025, 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://download.java.net/java/early_access/jdk24/docs/api/jdk.jfr/jdk/jfr/package-summary.html