Spec-Zone.ru › OpenJDK 21

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

Методы, объявленные в классе 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 - MBeanServerConnection, где зарегистрирован FlightRecorderMXBean, а не null
Исключения:
IOException - если поток нельзя открыть, при возникновении ошибки ввода-вывода при попытке доступа к репозиторию или FlightRecorderMXBean
SecurityException - если существует менеджер безопасности, и его метод checkRead запрещает чтение каталога или файлов в каталоге.

RemoteRecordingStream

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

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

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

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

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 - если данные записи не могут быть скопированы в указанное местоположение, или если поток закрыт, или не запущен.
SecurityException - если существует менеджер безопасности, и у вызывающего объекта нет FilePermission для записи в целевой путь
С:
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, 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.management.jfr/jdk/management/jfr/RemoteRecordingStream.html

Spec-Zone.ru

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