Spec-Zone.ru › OpenJDK 21

Пакет jdk.jfr

package jdk.jfr
Этот пакет предоставляет классы для создания событий и управления Flight Recorder.

Определение событий

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, за которым следует пробел и одна из следующих единиц:
  • "ns" (наносекунды)
  • "us" (микросекунды)
  • "ms" (миллисекунды)
  • "s" (секунды)
  • "m" (минуты)
  • "h" (часы)
  • "d" (дни)
"0"
"10 ms"
"1 с"
period Указывает интервал, с которым событие испускается, если оно периодическое "everyChunk" "everyChunk", если периодическое событие должно испускаться при каждой ротации файла, в противном случае строковое представление положительного значения Long с последующим пробелом и одной из следующих единиц:
  • "ns" (наносекунды)
  • "us" (микросекунды)
  • "ms" (миллисекунды)
  • "s" (секунды)
  • "m" (минуты)
  • "h" (часы)
  • "d" (дни)
"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
Пакет Описание
jdk.jfr.consumer
В этом пакете содержатся классы для потребления данных Flight Recorder.
Класс Описание
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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API