Spec-Zone.ru › OpenJDK 21

Класс RecordingStream

java.lang.Object
jdk.jfr.consumer.RecordingStream
Все реализованные интерфейсы:
AutoCloseable, EventStream
public final class RecordingStream extends Object implements AutoCloseable, EventStream
Поток записи генерирует события из текущей JVM (Java Virtual Machine).

Следующий пример показывает, как записать события с использованием стандартной конфигурации и вывести события Garbage Collection, CPU Load и JVM Information в стандартный вывод.

Configuration c = Configuration.getConfiguration("default");
try (var rs = new RecordingStream(c)) {
    rs.onEvent("jdk.GarbageCollection", System.out::println);
    rs.onEvent("jdk.CPULoad", System.out::println);
    rs.onEvent("jdk.JVMInformation", System.out::println);
    rs.start();
}
С момента:
14

Краткое описание конструкторов

Конструктор Описание
RecordingStream()
Создает поток событий для текущей JVM (Java Virtual Machine).
RecordingStream(Configuration configuration)
Создает поток записи, используя настройки из конфигурации.

Краткое описание методов

Модификатор и тип Метод Описание
void awaitTermination()
Ожидает завершения всех действий, или закрытия потока, или прерывания текущей нити, в зависимости от того, что произойдет раньше.
void awaitTermination(Duration timeout)
Ожидает завершения всех действий, или закрытия потока, или истечения таймаута, или прерывания текущей нити, в зависимости от того, что произойдет раньше.
void close()
Закрывает этот ресурс, освобождая все основанные ресурсы.
EventSettings disable(Class<? extends Event> eventClass)
Отключает событие.
EventSettings disable(String name)
Отключает событие с указанным именем.
void dump(Path destination)
Записывает данные записи в файл.
EventSettings enable(Class<? extends Event> eventClass)
Включает событие.
EventSettings enable(String name)
Включает событие с указанным именем.
void onClose(Runnable action)
Регистрирует действие, которое должно быть выполнено при закрытии потока.
void onError(Consumer<Throwable> action)
Регистрирует действие, которое должно быть выполнено, если произошла ошибка.
void onEvent(String eventName, Consumer<RecordedEvent> action)
Регистрирует действие, которое должно быть выполнено для всех событий, соответствующих имени.
void onEvent(Consumer<RecordedEvent> action)
Регистрирует действие, которое должно быть выполнено для всех событий в потоке.
void onFlush(Runnable action)
Регистрирует действие, которое должно быть выполнено после того, как поток был сброшен.
boolean remove(Object action)
Отменяет регистрацию действия.
void setEndTime(Instant endTime)
Указывает конечную дату и время потока.
void setMaxAge(Duration maxAge)
Определяет, как долго данные хранятся для потока.
void setMaxSize(long maxSize)
Определяет, сколько данных сохраняется для потока.
void setOrdered(boolean ordered)
Указывает, что события приходят в хронологическом порядке, отсортированные по времени их добавления в поток.
void setReuse(boolean reuse)
Указывает, что объект события в действии EventStream.onEvent(Consumer) может быть повторно использован.
void setSettings(Map<String,String> settings)
Заменяет все настройки для данного потока записи.
void setStartTime(Instant startTime)
Указывает начальную дату и время потока.
void start()
Начинает обработку действий.
void startAsync()
Начинает асинхронную обработку действий.
boolean stop()
Останавливает поток записи.

Методы, объявленные в классе java.lang.Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

Методы, объявленные в интерфейсе jdk.jfr.consumer.EventStream

onMetadata

Подробное описание конструкторов

ПотокЗаписи

public RecordingStream()
Создаёт поток событий для текущей виртуальной машины Java (JVM).
Исключение:
IllegalStateException - если Flight Recorder не может быть создан (например, если виртуальная машина Java (JVM) не поддерживает Flight Recorder, или если репозиторий файлов не может быть создан или доступен)
SecurityException - если существует менеджер безопасности, и у вызывающего объекта нет FlightRecorderPermission("accessFlightRecorder")

ПотокЗаписи

public RecordingStream(Configuration configuration)
Создаёт поток записи, используя настройки из конфигурации.

Следующий пример демонстрирует создание потока записи, использующего предопределённую конфигурацию.

var c = Configuration.getConfiguration("default");
try (var rs = new RecordingStream(c)) {
    rs.onEvent(System.out::println);
    rs.start();
}
Параметры:
configuration - конфигурация, содержащая используемые настройки, не null
Исключение:
IllegalStateException - если Flight Recorder не может быть создан (например, если виртуальная машина Java (JVM) не поддерживает Flight Recorder, или если репозиторий файлов не может быть создан или доступен)
SecurityException - если используется менеджер безопасности и разрешение FlightRecorderPermission "accessFlightRecorder" не установлено.
См. также:
  • Configuration

Подробное описание методов

enable

public EventSettings enable(String name)
Включает событие с указанным именем.

Если несколько событий имеют одинаковое имя (например, один и тот же класс загружен в разных загрузчиках классов), то все события, соответствующие имени, включаются. Для включения конкретного класса используйте метод enable(Class) или String представление идентификатора типа события.

Параметры:
name - настройки события, не null
Возвращает:
настройки события для дальнейшей конфигурации, не null
См. также:
  • EventType

setSettings

public void setSettings(Map<String,String> settings)
Заменяет все настройки для этого потока записи.

Следующий пример записывает 20 секунд, используя конфигурацию "default", а затем меняет настройки на конфигурацию "profile".

Configuration defaultConfiguration = Configuration.getConfiguration("default");
Configuration profileConfiguration = Configuration.getConfiguration("profile");
try (var rs = new RecordingStream(defaultConfiguration)) {
    rs.onEvent(System.out::println);
    rs.startAsync();
    Thread.sleep(20_000);
    rs.setSettings(profileConfiguration.getSettings());
    Thread.sleep(20_000);
}
Параметры:
settings - настройки для установки, не null
См. также:
  • Recording.setSettings(Map)

enable

public EventSettings enable(Class<? extends Event> eventClass)
Включает событие.
Параметры:
eventClass - событие для включения, не null
Возвращает:
настройки события для дальнейшей конфигурации, не null
Исключение:
IllegalArgumentException - если eventClass является абстрактным классом или не является подклассом Event

disable

public EventSettings disable(String name)
Отключает событие с указанным именем.

Если несколько событий имеют одинаковое имя (например, один и тот же класс загружен в разных загрузчиках классов), то все события, соответствующие имени, отключаются. Для отключения конкретного класса используйте метод disable(Class) или String представление идентификатора типа события.

Параметры:
name - настройки события, не null
Возвращает:
настройки события для дальнейшей конфигурации, не null

disable

public EventSettings disable(Class<? extends Event> eventClass)
Отключает событие.
Параметры:
eventClass - событие для отключения, не null
Возвращает:
настройки события для дальнейшей конфигурации, не null
Исключение:
IllegalArgumentException - если eventClass является абстрактным классом или не является подклассом Event

setMaxAge

public void setMaxAge(Duration maxAge)
Определяет, как долго сохраняются данные для потока.

Для управления объёмом данных записи, хранимых на диске, можно указать максимальную длительность хранения данных. Данные, хранящиеся на диске и старше указанного временного интервала, удаляются виртуальной машиной Java (JVM).

Если ни максимальный предел, ни максимальный срок хранения не установлены, размер записи может неограниченно расти, если события включены.

Параметры:
maxAge - длительность хранения данных, или null для бесконечного срока
Исключение:
IllegalArgumentException - если maxAge отрицательно
IllegalStateException - если запись находится в состоянии CLOSED

setMaxSize

public void setMaxSize(long maxSize)
Определяет, сколько данных сохраняется для потока.

Для управления объёмом данных записи, хранимых на диске, можно указать максимальный объём данных для хранения. Когда максимальный предел превышен, виртуальная машина Java (JVM) удаляет старейший фрагмент, чтобы освободить место для более нового фрагмента.

Если ни максимальный предел, ни максимальный срок хранения не установлены, размер записи может неограниченно расти.

Размер измеряется в байтах.

Параметры:
maxSize - объём данных для хранения, 0 для бесконечного объёма
Исключение:
IllegalArgumentException - если maxSize отрицательно
IllegalStateException - если запись находится в состоянии CLOSED

setReuse

public void setReuse(boolean reuse)
Описание скопировано из интерфейса: EventStream
Указывает, что объект события в действии EventStream.onEvent(Consumer) может быть повторно использован.

Если повторное использование установлено в true, действие не должно хранить ссылку на объект события после завершения действия.

Определено в:
setReuse в интерфейсе EventStream
Параметры:
reuse - true если объект события может быть повторно использован, false в противном случае

setOrdered

public void setOrdered(boolean ordered)
Описание скопировано из интерфейса: EventStream
Указывает, что события поступают в хронологическом порядке, отсортированные по времени их записи в поток.
Определено в:
setOrdered в интерфейсе EventStream
Параметры:
ordered - если объекты событий поступают в хронологическом порядке в EventStream.onEvent(Consumer)

setStartTime

public void setStartTime(Instant startTime)
Описание скопировано из интерфейса: EventStream
Устанавливает время начала потока.

Время начала должно быть установлено до запуска потока

Определено в:
setStartTime в интерфейсе EventStream
Параметры:
startTime - время начала, не null
См. также:
  • EventStream.start()
  • EventStream.startAsync()

setEndTime

public void setEndTime(Instant endTime)
Описание скопировано из интерфейса: EventStream
Устанавливает время окончания потока.

Время окончания должно быть установлено до запуска потока.

В момент времени окончания поток закрывается.

Определено в:
setEndTime в интерфейсе EventStream
Параметры:
endTime - время окончания, не null
См. также:
  • EventStream.start()
  • EventStream.startAsync()

onEvent

public void onEvent(String eventName, Consumer<RecordedEvent> action)
Описание скопировано из интерфейса: EventStream
Регистрирует действие для выполнения на всех событиях, соответствующих имени.
Определено в:
onEvent в интерфейсе EventStream
Параметры:
eventName - имя события, не null
action - действие для выполнения на каждом RecordedEvent, соответствующем имени события, не null

onEvent

public void onEvent(Consumer<RecordedEvent> action)
Описание скопировано из интерфейса: EventStream
Регистрирует действие для выполнения на всех событиях в потоке.

Для выполнения действия на подмножестве типов событий, используйте EventStream.onEvent(String, Consumer) и EventStream.onMetadata(Consumer), так как это, скорее всего, более производительно, чем любой механизм выбора или фильтрации, реализованный в общем действии.

Specified by:
onEvent в интерфейсе EventStream
Параметры:
action - действие для выполнения на каждом RecordedEvent, а не null
См. также:
  • EventStream.onEvent(Consumer)
  • EventStream.onMetadata(Consumer)

onFlush

public void onFlush(Runnable action)
Описание скопировано из интерфейса: EventStream
Регистрирует действие для выполнения после того, как поток был сброшен.
Specified by:
onFlush в интерфейсе EventStream
Параметры:
action - действие для выполнения после сброса потока, а не null

onClose

public void onClose(Runnable action)
Описание скопировано из интерфейса: EventStream
Регистрирует действие для выполнения при закрытии потока.

Если поток уже закрыт, действие будет выполнено немедленно в текущей нити.

Specified by:
onClose в интерфейсе EventStream
Параметры:
action - действие для выполнения после закрытия потока, а не null
См. также:
  • EventStream.close()

onError

public void onError(Consumer<Throwable> action)
Описание скопировано из интерфейса: EventStream
Регистрирует действие для выполнения, если произойдет исключение.

Если действие не зарегистрировано, трассировка стека исключений выводится в стандартный вывод ошибок.

Регистрация действия переопределяет стандартное поведение. Если зарегистрировано несколько действий, они выполняются в порядке регистрации.

Если данная функция сама вызывает исключение, поведение является неопределенным.

Specified by:
onError в интерфейсе EventStream
Параметры:
action - действие для выполнения, если произойдет исключение, а не null

close

public void close()
Описание скопировано из интерфейса: AutoCloseable
Закрывает этот ресурс, высвобождая все базовые ресурсы. Этот метод вызывается автоматически для объектов, управляемых оператором try-with-resources.
Specified by:
close в интерфейсе AutoCloseable
Specified by:
close в интерфейсе EventStream

remove

public boolean remove(Object action)
Описание скопировано из интерфейса: EventStream
Удаляет зарегистрированное действие.

Если действие зарегистрировано несколько раз, все экземпляры удаляются.

Specified by:
remove в интерфейсе EventStream
Параметры:
action - действие для удаления, а не null
Возвращает:
true если действие было удалено, false в противном случае
См. также:
  • EventStream.onEvent(Consumer)
  • EventStream.onEvent(String, Consumer)
  • EventStream.onFlush(Runnable)
  • EventStream.onClose(Runnable)
  • EventStream.onError(Consumer)

start

public void start()
Описание скопировано из интерфейса: EventStream
Начинает обработку действий.

Действия выполняются в текущей нити.

Чтобы остановить поток, используйте метод EventStream.close().

Specified by:
start в интерфейсе EventStream

startAsync

public void startAsync()
Запускает асинхронную обработку действий.

Действия выполняются в отдельной нити.

Чтобы остановить поток, используйте метод close().

Следующий пример выводит использование ЦП в течение десяти секунд. Когда текущая нить выходит из блока try-with-resources, поток останавливается/закрывается.

try (var stream = new RecordingStream()) {
    stream.enable("jdk.CPULoad").withPeriod(Duration.ofSeconds(1));
    stream.onEvent("jdk.CPULoad", event -> {
        System.out.println(event);
    });
    stream.startAsync();
    Thread.sleep(10_000);
}
Specified by:
startAsync в интерфейсе EventStream
Исключение:
IllegalStateException - если поток уже запущен или закрыт

stop

public boolean stop()
Останавливает поток записи.

Останавливает запущенный поток и ожидает, пока все события в записи не будут обработаны.

Вызов этого метода в действии, например, в методе onEvent(Consumer), может заблокировать поток неопределенно долго. Чтобы прервать поток, используйте метод close().

Следующий фрагмент кода демонстрирует, как этот метод можно использовать совместно с методом startAsync() для мониторинга событий во время тестового метода:

AtomicBoolean socketUse = new AtomicBoolean();
try (var r = new RecordingStream()) {
    r.setMaxSize(Long.MAX_VALUE);
    r.enable("jdk.SocketWrite").withoutThreshold();
    r.enable("jdk.SocketRead").withoutThreshold();
    r.onEvent(event -> socketUse.set(true));
    r.startAsync();
    testFoo();
    r.stop();
    if (socketUse.get()) {
        r.dump(Path.of("socket-events.jfr"));
        throw new AssertionError("testFoo() should not use network");
    }
}
Возвращает:
true если запись остановлена, false в противном случае
Исключение:
IllegalStateException - если запись не запущена или уже остановлена
С момента:
20

dump

public void dump(Path destination) throws IOException
Записывает данные записи в файл.

Поток записи должен быть запущен, но не закрыт.

Настоятельно рекомендуется установить максимальный срок действия или максимальный размер перед запуском потока. В противном случае дамп может не содержать никаких событий.

Параметры:
destination - расположение, куда записываются данные записи, а не null
Исключение:
IOException - если данные записи не могут быть скопированы в указанное расположение, или если поток закрыт или не запущен.
SecurityException - если существует менеджер безопасности и у вызывающего объекта нет FilePermission для записи в целевой путь
С момента:
17
См. также:
  • setMaxAge(Duration)
  • setMaxSize(long)

awaitTermination

public void awaitTermination(Duration timeout) throws InterruptedException
Описание скопировано из интерфейса: EventStream
Заблокировать до завершения всех действий, или закрытия потока, или истечения времени ожидания, или прерывания текущей нити, в зависимости от того, что произойдет первым.
Specified by:
awaitTermination в интерфейсе EventStream
Параметры:
timeout - максимальное время ожидания, а не null
Исключение:
InterruptedException - если произошло прерывание во время ожидания
См. также:
  • EventStream.start()
  • EventStream.startAsync()
  • Thread.interrupt()

awaitTermination

public void awaitTermination() throws InterruptedException
Описание скопировано из интерфейса: EventStream
Заблокировать до завершения всех действий, или закрытия потока, или прерывания текущей нити, в зависимости от того, что произойдет первым.
Specified by:
awaitTermination в интерфейсе EventStream
Исключение:
InterruptedException - если произошло прерывание во время ожидания
См. также:
  • EventStream.start()
  • EventStream.startAsync()
  • Thread.interrupt()

© 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/consumer/RecordingStream.html

Spec-Zone.ru

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