JFRによるネイティブ実行可能ファイルのビルドおよび実行

JDK Flight Recorder (JFR)は、JVMに組み込まれている、実行中のJavaアプリケーションに関する診断およびプロファイリングのデータを収集するツールです。GraalVMネイティブ・イメージはJFRイベントをサポートしており、ユーザーは、Java HotSpot VMでJFRを使用する場合と同様に、jdk.jfr.Event APIを使用できます。

ネイティブ実行可能ファイルの実行時にJFRイベントを記録するには、このガイドの説明に従ってJFRサポートとJFR記録を有効にします。

ノート: JFRイベントの記録は、WindowsのGraalVM JDKではまだサポートされていません。

実行時のJFRサポートおよびイベントの記録の有効化

JFRイベントがサポートされるネイティブ実行可能ファイルをビルドするには、まず、native-imageツールを起動するときに--enable-monitoring=jfrオプションを追加する必要があります。次に、システムを有効にし、記録を開始し、ネイティブ実行可能ファイルの実行時にロギングを構成する必要があります。

次のステップに従って、JFRをサポートするネイティブ実行可能ファイルをビルドし、実行時にイベントを記録します。

ノート: GraalVM JDKがインストール済であることを確認します。最も簡単に始めるには、SDKMAN!を使用します。その他のインストール・オプションについては、「ダウンロード」セクションを参照してください。

  1. 次を実行してVisualVMをインストールします:
     gu install visualvm
    
  2. 次のコードをJFRDemo.javaという名前のファイルに保存します。

     import jdk.jfr.Event;
     import jdk.jfr.Description;
     import jdk.jfr.Label;
    
     public class JFRDemo {
    
       @Label("Hello World")
       @Description("Build and run a native executable with JFR.")
       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();
       }
     }
    

    このデモ・アプリケーションは、単純なクラスとJDKライブラリ・クラスで構成されます。これは、@Label注釈のラベルが付いたイベントをjdk.jfr.*パッケージから作成します。このアプリケーションを実行すると、何も出力されず、そのイベントが実行されるだけです。

  3. GraalVM JDKを使用してJavaファイルをコンパイルします:
     $JAVA_HOME/bin/javac JFRDemo.java
    

    JFRDemo$HelloWorldEvent.classおよびJFRDemo.classの2つのクラス・ファイルが作成されます。

  4. VM検査を有効にしてネイティブ実行可能ファイルをビルドします:
     $JAVA_HOME/bin/native-image --enable-monitoring=jfr JFRDemo
    

    --enable-monitoring=jfrオプションによって、VMの検査に使用できるJFRなどの機能が有効になります。

  5. 実行可能ファイルを実行し、記録を開始します:
     ./jfrdemo -XX:StartFlightRecording="filename=recording.jfr"
    

    このコマンドは、アプリケーションをネイティブ実行可能ファイルとして実行します。-XX:StartFlightRecordingオプションは、組込みフライト・レコーダを有効にして、指定したバイナリ・ファイルrecording.jfrへの記録を開始します。

  6. VisualVMを起動して、記録ファイルの内容をわかりやすい方法で表示します。GraalVMは、コア・インストールでVisualVMを提供します。ツールを起動するには、次を実行します:

     $JAVA_HOME/bin/jvisualvm
    
  7. 「File」「Add JFR Snapshot」の順に移動し、recording.jfrを参照して、選択したファイルを開きます。表示名を確認し、「OK」をクリックします。開くと、モニタリング、スレッド、例外など、チェックできるいくつものオプションが表示されますが、イベントの参照を確認することをお薦めします。次のようになります:

    JDK Flight Recorder

    または、次のコマンドを実行して、記録ファイルの内容をコンソール・ウィンドウに表示できます:

     $JAVA_HOME/bin/jfr print recording.jfr
    

    Flight Recorderにより記録されたすべてのイベントが出力されます。