この章では、フライト記録で捕捉される情報を、テンプレートを使って制御する方法について説明します。
この章には、次のセクションがあります。
Java Flight Recorder に関するほとんどすべてを、各種設定を通じて制御できます。記録されるデータの量を制御するために、各イベントタイプで次の情報を構成できます。
有効: 特定の記録で各イベントタイプを有効化または無効化できます。頻繁に発生するイベント (同期イベントなど) を無効にすることで、記録のサイズを減らしやすくなります。
しきい値: 期間を持つイベントは、しきい値を設定してフィルタリングできます。期間がしきい値よりも短いイベントは、保存されません。
スタックトレース: イベントごとに、その生成元となるポイントのスタックトレース情報を有効化または無効化できます。スタックトレースの作成は、コストが高くなる可能性がありますが、イベントの発生原因を理解するうえで極めて役に立つ可能性があります。
要求周期: 要求可能なイベントが Java Flight Recorder によって要求される頻度を構成できます。
Java Flight Recorder では、記録を開始するたびにこれらすべての構成オプションを変更しないですむように、テンプレートが使用されます。さまざまなタスクでもっともよく知られたオプションのセットが、Mission Control テンプレートとサーバー側テンプレートの両方に格納されています。これらのテンプレートは、そのまま使用したり、自分のニーズに合うように変更したりできます。
警告: フライト記録ファイルのデータ形式は極めてコンパクトですが、記録内で有効にするイベントタイプ (特にスタックトレースを頻繁に収集するものなど、リソース負荷の高いもの) が多すぎると、データが大量に生成され、パフォーマンスオーバーヘッドが増大する可能性があります。 |
記録を開始する前に、Java Flight Recording ウィザード (図 2-1 を参照) で使用するテンプレートを選択できます。テンプレートは、記録中にどのイベントが有効化されるかを制御します。デフォルトで使用可能なテンプレートは次のとおりです。
連続
本番環境での連続使用向け (オーバーヘッドは 1% 未満)。
プロファイリング
汎用プロファイリング向け (オーバーヘッドは約 2%)。
テンプレートマネージャーを使って、新しいテンプレートを追加したり既存テンプレートを変更したりできます。テンプレートをエクスポートしてほかのユーザーと共有したり、ほかの環境からテンプレートをインポートしたりすることもできます。
Java Flight Recorder には 2 つの構成済みサーバー側テンプレートが付属しています。
default.jfc
: パフォーマンスオーバーヘッドが非常に低くなるようにチューニングされているので、本番での連続使用にお勧めです。
profile.jfc
: 入手可能な情報量と発生するパフォーマンスオーバーヘッドとのバランスがうまく取れているので、プロファイリングに理想的です。
どちらのテンプレートも、JDK インストールディレクトリの jre/lib/jfr
の下に格納されています。ユーザー独自のサーバー側テンプレートを作成するには、デフォルトのものをコピーしてコピーを変更します。デフォルトのテンプレートを変更しないでください。
記録をコマンド行からまたは診断コマンドを使って開始する際に、使用すべきテンプレートを settings
パラメータの引数として指定できます。次の例は、MyApp
という名前の実行中 Java アプリケーション上で、profile.jfc
テンプレートを使って継続時間 5 分の記録を開始する方法を示しています。
jcmd MyApp JFR.start duration=5min settings=profile
次の例は、Java Flight Recorder が有効かつ default.jfc
テンプレートの設定を使用するように構成された状態で MyApp
アプリケーションを起動し、同時に記録を開始する方法を示しています。
java MyApp -XX:+UnlockCpmmercialFeatures -XX:+FlightRecorder -XX:FlightRecorderOptions=defaultrecording=true,settings=default -XX:+StartFlightRecording