Spec-Zone.ru › OpenJDK 27

Класс 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();
    }
    
Начиная с:
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()
Останавливает поток записи.

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

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Модификатор и тип Метод Описание
protected Object clone()
Создает и возвращает копию этого объекта.
boolean equals(Object obj)
Указывает, равен ли этот объект другому объекту.
protected void finalize()
Устарело, будет удалено: этот элемент API может быть удален в будущей версии.
Финализация объявлена устаревшей и может быть удалена в одном из будущих выпусков.
final Class<?> getClass()
Возвращает класс времени выполнения этого Object.
int hashCode()
Возвращает хеш-код этого объекта.
final void notify()
Пробуждает один поток, ожидающий на мониторе этого объекта.
final void notifyAll()
Пробуждает все потоки, ожидающие на мониторе этого объекта.
String toString()
Возвращает строковое представление объекта.
final void wait()
Заставляет текущий поток ждать пробуждения, обычно вследствие вызова notify или interrupt.
final void wait(long timeoutMillis)
Заставляет текущий поток ждать пробуждения, обычно вследствие вызова notify или interrupt, либо истечения заданного времени.
final void wait(long timeoutMillis, int nanos)
Заставляет текущий поток ждать пробуждения, обычно вследствие вызова notify или interrupt, либо истечения заданного времени.

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

onMetadata
Модификатор и тип Метод Описание
default void onMetadata(Consumer<MetadataEvent> action)
Регистрирует действие, выполняемое при поступлении в поток новых метаданных.

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

RemoteRecordingStream

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

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

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

RemoteRecordingStream

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

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

Параметры:
connection — 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()

close

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

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

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

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

remove

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)

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()

start

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

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

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

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

startAsync

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

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

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

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

stop

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()

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в документации Java SE, которая содержит более подробные описания для разработчиков, включая обзоры концепций, определения терминов, обходные решения и примеры работающего кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или её аффилированных лиц в США и других странах.
Авторское право © 1993, 2026, Oracle и/или её аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 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.

Spec-Zone.ru

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