19 プロセスにおけるイベント・ストリームの作成(パッシブ)

サンプルPassiveEventStreamSample.javaでは、メソッドEventStream.openRepository()を使用してパッシブ・イベント・ストリームが開始されます。他のイベント・ストリームと同様に、パッシブ・イベント・ストリームはイベントをリスニングします。この例では、jdk.CPULoadイベントをリスニングします。ただし、記録される内容は、コマンド行オプションの-XX:StartFlightRecordingjcmdコマンドのJFR.start、またはAPI (例: Recording::start())など、外部手段によって制御されます。

サンプルPassiveEventStreamSample.javaでは、RecordingStreamではなく、EventStream.openRepository()を使用してイベント・ストリームが作成されます。イベント・ストリームには記録が必要です。このサンプルでは、コマンド行オプションの-XX:StartFlightRecordingから記録を取得します。

import java.util.concurrent.atomic.AtomicInteger;

import jdk.jfr.consumer.EventStream;

public class PassiveEventStreamSample {

    static int NUMBER_CPULOAD_EVENTS = 3;

    public static void main(String... args) throws Exception {

        AtomicInteger timer = new AtomicInteger();

        try (EventStream es = EventStream.openRepository()) {
            es.onEvent("jdk.CPULoad", event -> {
                System.out.println("CPU Load " + event.getEndTime());
                System.out.println(" Machine total: "
                    + 100 * event.getFloat("machineTotal") + "%");
                System.out.println(
                    " JVM User: " + 100 * event.getFloat("jvmUser") +
                    "%");
                System.out.println(
                    " JVM System: " + 100 * event.getFloat("jvmSystem") +
                    "%");
                System.out.println();
                if (timer.incrementAndGet() == NUMBER_CPULOAD_EVENTS) {
                    System.exit(0);
                }
            });
            es.start();
        }
    }
}

次のコマンドを使用して、PassiveEventStreamSampleを実行します:

java -XX:StartFlightRecording PassiveEventStreamSample.java

次のような出力が表示されます:

Started recording 1. No limit specified, using maxsize=250MB as default.

Use jcmd 12352 JFR.dump name=1 filename=FILEPATH to copy recording data to file.
CPU Load 2020-01-24T05:34:36.265584686Z
 Machine total: 19.3799%
 JVM User: 5.2175264%
 JVM System: 1.8634024%

CPU Load 2020-01-24T05:34:37.310049859Z
 Machine total: 5.2533073%
 JVM User: 0.0%
 JVM System: 0.3899041%

CPU Load 2020-01-24T05:34:38.373796070Z
 Machine total: 7.242967%
 JVM User: 0.0%
 JVM System: 1.1451485%