Spec-Zone.ru › OpenJDK 24

Класс RemoteRecordingStream

java.lang.Object
jdk.management.jfr.RemoteRecordingStream
Все реализуемые интерфейсы:
AutoCloseable, EventStream
public final class RemoteRecordingStream extends Object implements EventStream
Реализация EventStream, позволяющая сериализовать события через сеть с помощью MBeanServerConnection.

Следующий пример демонстрирует запись пауз сборки мусора и использования ЦП на удалённом хосте и вывод событий в стандартный вывод.


     String host = "com.example";
     int port = 4711;

     String url = "service:jmx:rmi:///jndi/rmi://" + host + ":" + port + "/jmxrmi";

     JMXServiceURL u = new JMXServiceURL(url);
     JMXConnector c = JMXConnectorFactory.connect(u);
     MBeanServerConnection conn = c.getMBeanServerConnection();

     try (var rs = new RemoteRecordingStream(conn)) {
         rs.enable("jdk.GCPhasePause").withoutThreshold();
         rs.enable("jdk.CPULoad").withPeriod(Duration.ofSeconds(1));
         rs.onEvent("jdk.CPULoad", System.out::println);
         rs.onEvent("jdk.GCPhasePause", System.out::println);
         rs.start();
     }

 
Since:
16

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

Конструктор Описание
RemoteRecordingStream(MBeanServerConnection connection)
Создаёт поток событий, работающий с MBeanServerConnection, имеющим зарегистрированный FlightRecorderMXBean.
RemoteRecordingStream(MBeanServerConnection connection, Path directory)
Создаёт поток событий, работающий с MBeanServerConnection, имеющим зарегистрированный FlightRecorderMXBean.

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

Модификатор и тип Метод Описание
void awaitTermination()
Ожидает завершения всех действий, закрытия потока или прерывания текущего потока, в зависимости от того, что произойдёт раньше.
void awaitTermination(Duration timeout)
Ожидает завершения всех действий, закрытия потока, истечения таймаута или прерывания текущего потока, в зависимости от того, что произойдёт раньше.
void close()
Освобождает все ресурсы, связанные с этим потоком.
EventSettings disable(String name)
Отключает событие с указанным именем.
void dump(Path destination)
Записывает данные записи в файл.
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

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

RemoteRecordingStream

public RemoteRecordingStream(MBeanServerConnection connection) throws IOException
Создаёт поток событий, работающий с MBeanServerConnection, в котором зарегистрирован FlightRecorderMXBean.

Для настройки параметров событий используйте setSettings(Map).

Параметры:
connection - the MBeanServerConnection, где зарегистрирован FlightRecorderMXBean, а не null
Исключения:
IOException - если поток нельзя открыть, произошла ошибка ввода-вывода при попытке доступа к хранилищу или FlightRecorderMXBean

RemoteRecordingStream

public RemoteRecordingStream(MBeanServerConnection connection, Path directory) throws IOException
Создаёт поток событий, работающий с MBeanServerConnection, в котором зарегистрирован FlightRecorderMXBean.

Для настройки параметров событий используйте setSettings(Map).

Параметры:
connection - the MBeanServerConnection, где зарегистрирован FlightRecorderMXBean, а не null
directory - каталог для сохранения загружаемых данных событий, а не null
Исключения:
IOException - если поток нельзя открыть, произошла ошибка ввода-вывода при попытке доступа к хранилищу или FlightRecorderMXBean

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

setSettings

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

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

 {


     String host = "com.example";
     int port = 4711;

     String url = "service:jmx:rmi:///jndi/rmi://" + host + ":" + port + "/jmxrmi";

     JMXServiceURL u = new JMXServiceURL(url);
     JMXConnector c = JMXConnectorFactory.connect(u);
     MBeanServerConnection conn = c.getMBeanServerConnection();

     try (final var rs = new RemoteRecordingStream(conn)) {
         rs.onMetadata(e -> {
             for (Configuration c : e.getConfigurations()) {
                 if (c.getName().equals("default")) {
                     rs.setSettings(c.getSettings());
                 }
             }
         });
         rs.onEvent(System.out::println);
         rs.start();
     }


 
Параметры:
settings - настройки для установки, а не null
См. также:
  • Recording.setSettings(Map)

disable

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

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

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

enable

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

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

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

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

onEvent

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

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

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

onEvent

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

onFlush

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

onError

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

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

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

Если этот метод сам вызывает исключение, поведение неопределённо.

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

onClose

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

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

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

закрыть

public void close()
Описание скопировано из интерфейса: EventStream
Освобождает все ресурсы, связанные с этим потоком.

Если поток запущен, асинхронно или синхронно, он останавливается немедленно или после следующего сброса. Этот метод НЕ ГАРАНТИРУЕТ, что все зарегистрированные действия будут завершены до возврата.

Закрытие ранее закрытого потока не оказывает никакого эффекта.

Определено в:
close в интерфейсе AutoCloseable
Определено в:
close в интерфейсе EventStream

удалить

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

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

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

установитьПереиспользование

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

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

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

установитьПорядок

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

установитьНачальноеВремя

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

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

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

установитьКонечноеВремя

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

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

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

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

запустить

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

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

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

Определено в:
start в интерфейсе EventStream

запуститьАсинхронно

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

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

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

Определено в:
startAsync в интерфейсе EventStream

остановить

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

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

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

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

  AtomicLong bytesWritten = new AtomicLong();
  try (var r = new RemoteRecordingStream(connection)) {
    r.setMaxSize(Long.MAX_VALUE);
    r.enable("jdk.FileWrite").withoutThreshold();
    r.onEvent(event ->
      bytesWritten.addAndGet(event.getLong("bytesWritten"))
    );
    r.startAsync();
    testFoo();
    r.stop();
    if (bytesWritten.get() > 1_000_000L) {
      r.dump(Path.of("file-write-events.jfr"));
      throw new AssertionError("testFoo() writes too much data to disk");
    }
  }
Возвращает:
true если запись остановлена, false в противном случае
Исключения:
IllegalStateException - если запись не запущена или уже остановлена
С:
20

dump

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

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

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

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

awaitTermination

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

awaitTermination

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

© 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.management.jfr/jdk/management/jfr/RemoteRecordingStream.html

Spec-Zone.ru

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