◀戻る
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! を使用すると簡単に開始できます。その他のインストールオプションについては、ダウンロードセクション を参照してください。
- 次のコードを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
でアノテーションされたイベントを作成します。このアプリケーションを実行しても何も出力されず、イベントが実行されるだけです。 - GraalVM JDKを使用してJavaファイルをコンパイルします
javac JFRDemo.java
これにより、JFRDemo$HelloWorldEvent.classとJFRDemo.classの2つのクラスファイルが作成されます。
- VMインスペクションを有効にしてネイティブ実行ファイルをビルドします
native-image --enable-monitoring=jfr JFRDemo
--enable-monitoring=jfr
オプションは、VMの検査に使用できるJFRなどの機能を有効にします。 - 実行ファイルを実行して記録を開始します
./jfrdemo -XX:StartFlightRecording=filename=recording.jfr
このコマンドは、アプリケーションをネイティブ実行ファイルとして実行します。
-XX:StartFlightRecording
オプションは組み込みのFlight Recorderを有効にし、指定されたバイナリファイルrecording.jfrへの記録を開始します。さらに、-XX:FlightRecorderLogging
ランタイムオプションを渡すことで、JFRのログ出力を構成できます。 -
ユーザーフレンドリーな方法で記録ファイルの内容を表示するには、VisualVM を起動します。
-
ファイル、次にJFRスナップショットの追加を選択し、recording.jfrを参照して選択したファイルを開きます。表示名を確認し、OKをクリックします。開くと、確認できるオプションがいくつかあります(監視、スレッド、例外など)が、主にイベントの参照に関心があります。次のような表示になります。
あるいは、このコマンドを実行することで、コンソールウィンドウで記録ファイルの内容を表示することもできます。
jfr print recording.jfr
Flight Recorderによって記録されたすべてのイベントを出力します。
関連ドキュメント
- JFRイベントに対するNative Imageのサポートと、JFRの記録とシステムロギングの構成方法の詳細について学習します。
- Javaで最初のイベントを作成して記録する.