戻る

JFRを使用したネイティブ実行ファイルのビルドと実行

JDK Flight Recorder (JFR) は、JVMに組み込まれた、実行中のJavaアプリケーションに関する診断データとプロファイリングデータを収集するためのツールです。GraalVM Native ImageはJFRイベントをサポートしており、ユーザーはjdk.jfr.Event API を使用して、Java HotSpot VMでJFRを使用する場合と同様のエクスペリエンスを得ることができます。

ネイティブ実行ファイルの実行時にJFRイベントを収集するには、このガイドに記載されているように、JFRサポートとJFRイベントの記録を有効にします。

注:JFRイベントの記録は、Windows上のGraalVM JDKではまだ利用できません。

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

JFRイベントサポートを含むネイティブ実行ファイルをビルドするには、native-imageツールの呼び出し時に--enable-monitoring=jfrオプションを追加し、実行時にJFR記録を開始します。

JFRサポートと実行時のイベント記録の実習を行うには、以下の手順に従ってください。

前提条件

GraalVM JDKがインストールされていることを確認してください。SDKMAN! を使用すると簡単に開始できます。その他のインストールオプションについては、ダウンロードセクション を参照してください。

  1. 次のコードを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ライブラリクラスで構成されています。jdk.jfr.*パッケージの@Labelでアノテーションされたイベントを作成します。このアプリケーションを実行しても何も出力されず、イベントが実行されるだけです。

  2. GraalVM JDKを使用してJavaファイルをコンパイルします
     javac JFRDemo.java
    

    これにより、JFRDemo$HelloWorldEvent.classJFRDemo.classの2つのクラスファイルが作成されます。

  3. VMインスペクションを有効にしてネイティブ実行ファイルをビルドします
     native-image --enable-monitoring=jfr JFRDemo
    

    --enable-monitoring=jfrオプションは、VMの検査に使用できるJFRなどの機能を有効にします。

  4. 実行ファイルを実行して記録を開始します
     ./jfrdemo -XX:StartFlightRecording=filename=recording.jfr
    

    このコマンドは、アプリケーションをネイティブ実行ファイルとして実行します。-XX:StartFlightRecordingオプションは組み込みのFlight Recorderを有効にし、指定されたバイナリファイルrecording.jfrへの記録を開始します。さらに、-XX:FlightRecorderLoggingランタイムオプションを渡すことで、JFRのログ出力を構成できます。

  5. ユーザーフレンドリーな方法で記録ファイルの内容を表示するには、VisualVM を起動します。

  6. ファイル、次にJFRスナップショットの追加を選択し、recording.jfrを参照して選択したファイルを開きます。表示名を確認し、OKをクリックします。開くと、確認できるオプションがいくつかあります(監視、スレッド、例外など)が、主にイベントの参照に関心があります。次のような表示になります。

    JDK Flight Recorder

    あるいは、このコマンドを実行することで、コンソールウィンドウで記録ファイルの内容を表示することもできます。

     jfr print recording.jfr
    

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

お問い合わせ