Пакет 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 в 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, 2021, 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/17/docs/api/jdk.jfr/jdk/jfr/package-summary.html