ネイティブ・イメージでのJDK Flight Recorder (JFR)

JDK Flight Recorder (JFR)は、JVMおよびJVMで実行されているアプリケーションに関する情報を取得するためのイベント・レコーダです。GraalVMネイティブ・イメージはJFRイベントを使用したネイティブ実行可能ファイルのビルドをサポートしており、ユーザーは、Java HotSpot VMでJFRを使用する場合と同様に、jdk.jfr.Event APIを使用できます。

ネイティブ実行可能ファイルの実行時にJFRイベントを記録するには、JFRサポートおよびJFR記録を有効にする必要があります。

実行時のJFRサポートおよびイベントの記録の追加

JFRイベントがサポートされるネイティブ実行可能ファイルをビルドするには、まずビルド時にJFRを含めてから、システムを有効にし、記録を開始し、ネイティブ実行可能ファイルの実行時にロギングを構成する必要があります。

JFRを使用してネイティブ実行可能ファイルをビルドするには、--enable-monitoring=jfrフラグを使用します:

native-image --enable-monitoring=jfr JavaApplication

システムを有効にし、記録を開始し、実行時にロギングを構成するために、次のオプションがサポートされています:

JFRを有効にして記録を開始するには、-XX:+FlightRecorder-XX:StartFlightRecordingを一緒に使用します。たとえば:

./javaapplication -XX:+FlightRecorder -XX:StartFlightRecording="filename=recording.jfr"

デモの実行

この非常に単純なデモ・アプリケーションをネイティブ・イメージに変換し、そこでJFRイベントを使用する方法を確認します。次のコードをExample.javaファイルに保存します。

import jdk.jfr.Event;
import jdk.jfr.Description;
import jdk.jfr.Label;

public class Example {

  @Label("Hello World")
  @Description("Helps programmer getting started")
  static class HelloWorldEvent extends Event {
      @Label("Message")
      String message;
  }

  public static void main(String... args) {
      HelloWorldEvent event = new HelloWorldEvent();
      event.message = "hello, world!";
      event.commit();
  }
}

JFR記録をさらに構成するか、ロギングを有効にできます。

JFR記録の構成

JFR記録を構成するには、キーと値のペアのカンマ区切りのリストを-XX:StartFlightRecordingオプションに渡します。たとえば:

-XX:StartFlightRecording="filename=recording.jfr,dumponexit=true,duration=10s"

次のキーと値のペアがサポートされています:

名前 デフォルト値 説明
name なし 記録の識別に使用できる名前(name=MyRecordingなど)
settings なし 設定ファイル(profile.jfc、default.jfcなど)、settings=myprofile.jfcなど
delay なし 記録開始の秒(s)、分(m)、時間(h)または日(d)単位の遅延時間(delay=5hなど)
duration 無限(0) 秒(s)、分(m)、時間(h)または日(d)単位の記録期間(duration=300sなど)
filename なし 結果の記録ファイル名(filename=recording1.jfrなど)
maxage 制限なし(0) 記録されたデータをディスク上に保存する秒(s)、分(m)、時間(h)または日(d)単位の最大時間(60mなど)または制限なしの場合は0。たとえば、"maxage=1d"
maxsize 制限なし(0) ディスク上に保存するKB(k)、MB(M)またはGB(G)単位の最大バイト数(500Mなど)または制限なしの場合は0。たとえば、"maxsize=1G"
dumponexit false JVMの停止時に実行中の記録をダンプするかどうか(dumponexit=trueなど)

JFRシステム・ロギングの構成

個別のフラグ-XX:FlightRecorderLoggingを使用して、JFRシステムのロギングを構成できます。使用法は-XX:FlightRecorderLogging=[tag1[+tag2...][*][=level][,...]]です。たとえば:

-XX:FlightRecorderLogging=jfr,system=debug
-XX:FlightRecorderLogging=all=trace
-XX:FlightRecorderLogging=jfr*=error

使用可能なログ・レベルは、trace、debug、info、warning、error、offです。

使用可能なログ・タグは、all、jfr、system、event、setting、bytecode、parser、metadata、dcmdです。

それ以外の場合、このオプションでは、タグの組合せのカンマ区切りリストが必要で、それぞれにオプションのワイルドカード(*)およびレベルがあります。

現在の制限事項

JFRサポートは依然として制限されています。たとえば、ほとんどのVM内部イベントや、スタック・トレースやメモリー・リーク検出などの高度な機能が不足しています。現在、JFR機能のサブセット(カスタム・イベントとシステム・イベント、ディスク・ベースの記録)を使用できます。次の点に注意してください:

その他の情報