Класс 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, у которого зарегистрирован 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() |
Начинает асинхронную обработку действий. |
Методы, унаследованные от класса 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).
- Parameters:
-
connection- theMBeanServerConnectionгде зарегистрированFlightRecorderMXBean, а неnull - Throws:
-
IOException- если поток не может быть открыт, происходит ошибка ввода-вывода при попытке доступа к репозиторию илиFlightRecorderMXBean -
SecurityException- если существует менеджер безопасности, и его методcheckReadзапрещает чтение каталога или файлов в нём.
RemoteRecordingStream
public RemoteRecordingStream(MBeanServerConnection connection, Path directory) throws IOException
MBeanServerConnection, в котором зарегистрирован FlightRecorderMXBean. Для настройки параметров событий используйте setSettings(Map).
- Parameters:
-
connection- theMBeanServerConnectionгде зарегистрированFlightRecorderMXBean, а неnull -
directory- каталог для хранения загруженных данных событий, а неnull - Throws:
-
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();
}
- Parameters:
-
settings- настройки для установки, а неnull - See Also:
disable
public EventSettings disable(String name)
Если несколько событий имеют одинаковое имя (например, один и тот же класс загружен в разных загрузчиках классов), то все события, соответствующие имени, отключаются.
- Parameters:
-
name- настройки для события, а неnull - Returns:
- настройки события для дальнейшей настройки, а не
null
enable
public EventSettings enable(String name)
Если несколько событий имеют одинаковое имя (например, один и тот же класс загружен в разных загрузчиках классов), то все события, соответствующие имени, включаются.
- Parameters:
-
name- настройки для события, а неnull - Returns:
- настройки события для дальнейшей настройки, а не
null - See Also:
setMaxAge
public void setMaxAge(Duration maxAge)
Для управления объёмом данных записи, хранящихся на диске, можно указать максимальную длительность хранения данных. Данные, хранящиеся на диске и старше указанного периода времени, удаляются виртуальной машиной Java (JVM).
Если ни максимальный лимит, ни максимальный срок не заданы, размер записи может неограниченно расти, если события не потребляются.
- Parameters:
-
maxAge- длительность хранения данных, илиnullесли бесконечно - Throws:
-
IllegalArgumentException- еслиmaxAgeотрицательно -
IllegalStateException- если запись находится вCLOSEDсостоянии
setMaxSize
public void setMaxSize(long maxSize)
Для управления объёмом данных записи, хранящихся на диске, можно указать максимальный объём данных для хранения. Когда этот предел превышен, виртуальная машина Java (JVM) удаляет самую старую часть, чтобы освободить место для более новой.
Если ни максимальный лимит, ни максимальный срок не заданы, размер записи может неограниченно расти, если события не потребляются.
Размер измеряется в байтах.
- Parameters:
-
maxSize- объём данных для сохранения,0если бесконечно - Throws:
-
IllegalArgumentException- еслиmaxSizeотрицательно -
IllegalStateException- если запись находится вCLOSEDсостоянии
onEvent
public void onEvent(Consumer<RecordedEvent> action)
EventStream- Specified by:
-
onEventв интерфейсеEventStream - Parameters:
-
action- действие для выполнения над каждымRecordedEvent, а неnull
onEvent
public void onEvent(String eventName, Consumer<RecordedEvent> action)
EventStream- Specified by:
-
onEventв интерфейсеEventStream - Parameters:
-
eventName- имя события, а неnull -
action- действие для выполнения над каждымRecordedEventсоответствующим имени события, а неnull
onFlush
public void onFlush(Runnable action)
EventStream- Specified by:
-
onFlushв интерфейсеEventStream - Parameters:
-
action- действие для выполнения после сброса потока, а неnull
onError
public void onError(Consumer<Throwable> action)
EventStreamЕсли действие не зарегистрировано, стековый след исключения выводится в стандартный вывод ошибок.
Регистрация действия переопределяет стандартное поведение. Если зарегистрированы несколько действий, они выполняются в порядке регистрации.
Если сам этот метод вызывает исключение, результат выполнения не определён.
- Specified by:
-
onErrorв интерфейсеEventStream - Parameters:
-
action- действие для выполнения при возникновении исключения, а неnull
onClose
public void onClose(Runnable action)
EventStreamЕсли поток уже закрыт, действие будет выполнено немедленно в текущей нити.
- Specified by:
-
onCloseв интерфейсеEventStream - Parameters:
-
action- действие для выполнения после закрытия потока, а неnull - See Also:
close
public void close()
EventStreamЕсли поток запущен, асинхронно или синхронно, он останавливается немедленно или после следующего сброса. Этот метод НЕ гарантирует, что все зарегистрированные действия будут завершены до возврата.
Закрытие уже закрытого потока не имеет эффекта.
- Specified by:
-
closeв интерфейсеAutoCloseable - Specified by:
-
closeв интерфейсеEventStream
удалить
public boolean remove(Object action)
EventStreamЕсли действие было зарегистрировано несколько раз, все экземпляры отменяются.
- Определено в:
-
removeв интерфейсеEventStream - Параметры:
-
action- действие для отмены регистрации, неnull - Возвращает:
-
trueесли действие было отменено,falseв противном случае - См. также:
установитьПовторноеИспользование
public void setReuse(boolean reuse)
EventStreamEventStream.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 - См. также:
установитьВремяОкончания
public void setEndTime(Instant endTime)
EventStreamВремя окончания должно быть установлено перед запуском потока.
По достижении времени окончания, поток закрывается.
- Определено в:
-
setEndTimeв интерфейсеEventStream - Параметры:
-
endTime- время окончания, неnull - См. также:
начать
public void start()
EventStreamДействия выполняются в текущей нити.
Для остановки потока используйте метод EventStream.close().
- Определено в:
-
startв интерфейсеEventStream
начатьАсинхронно
public void startAsync()
EventStreamДействия выполняются в отдельной нити.
Для остановки потока используйте метод EventStream.close().
- Определено в:
-
startAsyncв интерфейсеEventStream
экспорт
public void dump(Path destination) throws IOException
Поток записи должен быть запущен, но не закрыт.
Настоятельно рекомендуется установить максимальный возраст или максимальный размер перед запуском потока. В противном случае экспорт может не содержать никаких событий.
- Параметры:
-
destination- расположение, куда записываются данные записи, неnull - Исключения:
-
IOException- если данные записи не могут быть скопированы в указанное расположение, или если поток закрыт, или не запущен. -
SecurityException- если менеджер безопасности существует и вызывающему объекту не предоставленыFilePermissionдля записи в целевой путь - С:
- 17
- См. также:
дождатьсяЗавершения
public void awaitTermination(Duration timeout) throws InterruptedException
EventStream- Определено в:
-
awaitTerminationв интерфейсеEventStream - Параметры:
-
timeout- максимальное время ожидания, неnull - Исключения:
-
InterruptedException- если прервано во время ожидания - См. также:
дождатьсяЗавершения
public void awaitTermination() throws InterruptedException
EventStream- Определено в:
-
awaitTerminationв интерфейсеEventStream - Исключения:
-
InterruptedException- если прервано во время ожидания - См. также:
© 1993, 2021, 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/17/docs/api/jdk.management.jfr/jdk/management/jfr/RemoteRecordingStream.html