Класс 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, в котором зарегистрирован FlightRecorderMXBean. |
RemoteRecordingStream |
Создает поток событий, работающий с MBeanServerConnection, в котором зарегистрирован FlightRecorderMXBean. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
void |
awaitTermination() |
Блокирует выполнение до завершения всех действий, закрытия потока, прерывания текущего потока или до наступления тайм-аута — в зависимости от того, что произойдет раньше. |
void |
awaitTermination |
Блокирует выполнение до завершения всех действий, закрытия потока, наступления тайм-аута или прерывания текущего потока — в зависимости от того, что произойдет раньше. |
void |
close() |
Освобождает все ресурсы, связанные с этим потоком. |
EventSettings |
disable |
Отключает событие с указанным именем. |
void |
dump |
Записывает данные записи в файл. |
EventSettings |
enable |
Включает событие с указанным именем. |
void |
onClose |
Регистрирует действие, выполняемое при закрытии потока. |
void |
onError |
Регистрирует действие, выполняемое при возникновении исключения. |
void |
onEvent |
Регистрирует действие для всех событий, соответствующих имени. |
void |
onEvent |
Регистрирует действие для всех событий в потоке. |
void |
onFlush |
Регистрирует действие, выполняемое после сброса потока. |
boolean |
remove |
Отменяет регистрацию действия. |
void |
setEndTime |
Задает время окончания потока. |
void |
setMaxAge |
Задает глубину хранения данных для потока. |
void |
setMaxSize |
Задает объем данных, хранящихся для потока. |
void |
setOrdered |
Задает хронологический порядок поступления событий, отсортированных по времени их фиксации в потоке. |
void |
setReuse |
Задает возможность повторного использования объекта события в действии EventStream.onEvent(Consumer). |
void |
setSettings |
Заменяет все параметры этого потока записи. |
void |
setStartTime |
Задает время начала потока. |
void |
start() |
Запускает обработку действий. |
void |
startAsync() |
Запускает асинхронную обработку действий. |
boolean |
stop() |
Останавливает поток записи. |
Методы, объявленные в классе Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait | Модификатор и тип | Метод | Описание |
|---|---|---|
protected Object |
clone() |
Создает и возвращает копию этого объекта. |
boolean |
equals |
Указывает, равен ли этот объект другому объекту. |
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 |
Заставляет текущий поток ждать пробуждения, обычно вследствие вызова notify или interrupt, либо истечения заданного времени. |
final void |
wait |
Заставляет текущий поток ждать пробуждения, обычно вследствие вызова notify или interrupt, либо истечения заданного времени. |
Методы, объявленные в интерфейсе EventStream
onMetadata | Модификатор и тип | Метод | Описание |
|---|---|---|
default void |
onMetadata |
Регистрирует действие, выполняемое при поступлении в поток новых метаданных. |
Подробное описание конструкторов
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 - См. также:
disable
public EventSettings disable(String name)
Если несколько событий имеют одинаковое имя (например, один и тот же класс загружен разными загрузчиками классов), отключаются все события, соответствующие этому имени.
- Параметры:
-
name— параметры события, неnull - Возвращает:
- параметр события для дальнейшей настройки, не
null
enable
public EventSettings enable(String name)
Если несколько событий имеют одинаковое имя (например, один и тот же класс загружен разными загрузчиками классов), включаются все события, соответствующие этому имени.
- Параметры:
-
name— параметры события, неnull - Возвращает:
- параметр события для дальнейшей настройки, не
null - См. также:
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 - См. также:
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 - См. также:
close
public void close()
EventStreamЕсли поток запущен асинхронно или синхронно, он немедленно останавливается или останавливается после следующего сброса. Этот метод НЕ гарантирует, что все зарегистрированные действия завершатся до его возврата.
Закрытие уже закрытого потока не оказывает никакого эффекта.
- Определён в:
-
closeв интерфейсеAutoCloseable - Определён в:
-
closeв интерфейсеEventStream
remove
public boolean remove(Object action)
EventStreamЕсли действие зарегистрировано несколько раз, отменяется регистрация всех его экземпляров.
- Определён в:
-
removeв интерфейсеEventStream - Параметры:
-
action— действие, регистрацию которого нужно отменить, неnull - Возвращает:
-
true, если регистрация действия отменена, иначеfalse - См. также:
setReuse
public void setReuse(boolean reuse)
EventStreamEventStream.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 - См. также:
setEndTime
public void setEndTime(Instant endTime)
EventStreamВремя окончания необходимо задать до запуска потока.
По достижении времени окончания поток закрывается.
- Определён в:
-
setEndTimeв интерфейсеEventStream - Параметры:
-
endTime— время окончания, неnull - См. также:
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
- См. также:
awaitTermination
public void awaitTermination(Duration timeout) throws InterruptedException
EventStream- Определён в:
-
awaitTerminationв интерфейсеEventStream - Параметры:
-
timeout— максимальное время ожидания, неnull - Исключения:
-
InterruptedException— если ожидание прервано - См. также:
awaitTermination
public void awaitTermination() throws InterruptedException
EventStream- Определён в:
-
awaitTerminationв интерфейсеEventStream - Исключения:
-
InterruptedException— если ожидание прервано - См. также:
© 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.