Пакет 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 s" |
period | Указывает интервал выдачи события, если оно является периодическим | "everyChunk" |
"everyChunk", если периодическое событие должно выдаваться при каждом переключении файла; в противном случае — строковое представление положительного значения Long, за которым следуют пробел и одна из следующих единиц измерения:
|
"20 ms""1 s""everyChunk"
|
stackTrace | Указывает, записывается ли стек вызовов из метода Event.commit() | "true" | Строковое представление Boolean ("true" или "false") |
"true","false"
|
throttle | Указывает максимальную частоту событий за единицу времени. |
"off" (без ограничения частоты) | "off", если частоту событий ограничивать не нужно; в противном случае — строковое представление положительного значения Long, за которым следуют косая черта ("/") и одна из следующих единиц измерения:
| "off""100/s""1000/m" |
filter | Указывает фильтр для события |
"" (пустая строка) | Пустая строка, если фильтр не используется. В противном случае — фильтр, который можно использовать с событиями jdk.MethodTrace или jdk.MethodTiming и который соответствует следующей грамматике: |
"java.lang.String""::<clinit>""java.util.HashMap::resize""java.io.FileDescriptor::<init>;java.io.FileDescriptor::close" "@jakarta.ws.rs.GET" |
Обработка null
В Javadoc для всех методов указано, принимают ли они null или возвращают его. Обычно это выражается как "not null". Если параметру null присвоено значение в месте, где это не допускается, выбрасывается исключение java.lang.NullPointerException. Если методу, который выбрасывает другие исключения, например java.io.IOException, передан параметр null, приоритет имеет исключение java.lang.NullPointerException, если только в Javadoc метода явно не указано, как обрабатывается null, то есть путем выбрасывания исключения java.lang.IllegalArgumentException.
- Начиная с версии:
- 9
| Класс | Описание |
|---|---|
| AnnotationElement | Описывает метаданные события, например метки, описания и единицы измерения. |
| BooleanFlag | Аннотация поля события, указывающая, что значение является логическим флагом — значением true или false. |
| Category | Аннотация события, связывающая тип события с категорией, заданной в виде понятного человеку пути. |
| Configuration | Набор параметров и метаданных, описывающих конфигурацию. |
| ContentType | Метааннотация, указывающая, что аннотация представляет тип содержимого, например интервал времени или частоту. |
| Contextual | Аннотация поля события, указывающая, что значение содержит контекстную информацию. |
| DataAmount | Аннотация поля события, указывающая, что значение представляет объем данных (например, в байтах). |
| Description | Аннотация, описывающая элемент одним или двумя предложениями. |
| Enabled | Аннотация события, определяющая, должно ли событие быть включено по умолчанию. |
| Event | Базовый класс событий, от которого следует наследоваться для определения событий и их полей. |
| EventFactory | Класс для определения события во время выполнения. |
| EventSettings | Вспомогательный класс для применения параметров событий к записи. |
| EventType | Описывает событие, его поля, параметры и аннотации. |
| Experimental | Аннотация, указывающая, что элемент является экспериментальным и может измениться без предупреждения. |
| FlightRecorder | Класс для доступа к Flight Recorder, управления им и его администрирования. |
| FlightRecorderListener | Интерфейс обратного вызова для отслеживания жизненного цикла Flight Recorder. |
| FlightRecorderPermission | Устарело, будет удалено: этот элемент API может быть удален в будущей версии. Это разрешение нельзя использовать для управления доступом к ресурсам, поскольку диспетчер безопасности больше не поддерживается. |
| Frequency | Аннотация поля события, указывающая, что значение является частотой, измеряемой в Гц. |
| Label | Аннотация, задающая понятное человеку имя элемента (например, "Maximum Throughput"). |
| MemoryAddress | Аннотация поля события, указывающая, что значение является адресом памяти. |
| MetadataDefinition | Метааннотация для определения новых типов метаданных событий. |
| Name | Аннотация, задающая имя элемента по умолчанию. |
| Percentage | Аннотация поля события, применяемая к дробным значениям, обычно находящимся в диапазоне от 0.0 до 1.0, чтобы указать, что значение является процентом. |
| Period | Аннотация события, указывающая значение параметра по умолчанию для периодического события. |
| Recording | Предоставляет средства для настройки, запуска и остановки записи, а также для сохранения данных записи на диск. |
| RecordingState | Указывает состояние в жизненном цикле записи. |
| Registered | Аннотация события для программной регистрации событий. |
| Relational | Метааннотация для реляционных аннотаций, применяемая к аннотации. |
| SettingControl | Базовый класс, от которого следует наследоваться для создания элементов управления параметрами. |
| SettingDefinition | Аннотация, указывающая, что метод в классе события следует использовать для фильтрации событий. |
| SettingDescriptor | Описывает параметр события. |
| StackTrace | Аннотация события, определяющая, содержит ли событие по умолчанию стек вызовов. |
| Threshold | Аннотация события, указывающая длительность по умолчанию, ниже которой событие не записывается (например, "20 ms"). |
| Throttle | Аннотация события, указывающая максимальную частоту событий за единицу времени (например, "100/s"). |
| 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://docs.oracle.com/en/java/javase/25/docs/api/jdk.jfr/jdk/jfr/package-summary.html