JFR(Java Flight Recorder)でJavaプログラムのプロファイルを取得する

  • 11
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

Java Flight Recorderを使うことで、JVM、およびJavaアプリケーションのsleep、wait、ロック・コンテンション、I/O、GC、メソッドプロファイルといったイベント情報を収集することができます。Java 7 Update 40以降で標準搭載されています。
JFR.png

詳細は、
https://docs.oracle.com/javase/jp/7/technotes/guides/jfr/toc.html

JFRプロファイルの収集

JFRは商用の機能なので、-XX:+UnlockCommercialFeatures オプションも指定する必要があります。
-XX:+UnlockCommercialFeatures -XX:+FlightRecorder

方法1. JAVA_TOOL_OPTIONSの設定

次の例は、60 秒の間にJavaアプリケーションが実行される場合、JFRの記録を開始し、それをmyRecording.jfr という名前のファイルに保存する方法を示しています。

set JAVA_TOOL_OPTIONS "-XX:+UnlockCommercialFeatures -XX:+FlightRecorder -XX:StartFlightRecording=duration=60s,filename=/tmp/myRecording.jfr"

方法2. jcmd診断ツールによる起動

・JFRを有効にする:
jcmd <プロセスID> VM.unlock_commercial_features
・JFRの起動開始:
jcmd <プロセスID> JFR.start duration=<監視時間(秒)> filename=<レコードファイル>

実行例:

$ jcmd 9560 VM.unlock_commercial_features
$ jcmd 9560 JFR.start duration=60s filename=/tmp/myRecording.jfr

方法3. javaコマンドのオプションに指定

次の例は、MyApp アプリケーションを実行し、すぐに 60 秒間の記録を開始し、それをmyRecording.jfr という名前のファイルに保存する方法を示しています。

$ java -XX:+UnlockCommercialFeatures -XX:+FlightRecorder -XX:StartFlightRecording=duration=60s,filename=/tmp/myRecording.jfr MyApp

JMC(Java Mission Control)で結果の確認

%JAVA_HOME%\bin\jmc.exeからJMC クライアントを起動し、JFRファイルを開くことで収集した結果をGUI上で確認できます。
2016-05-31_094523.png