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