この章では、サーバー側のテンプレートを変更または独自のテンプレートを作成する方法を説明します。
次のセクションが含まれます:
イベント・タイプはリレーショナル・キーによって参照され、JVMまたはアプリケーションでどのタイプのサブシステムに所属するかを示します。すべてのJVM内部システムのイベント・タイプのリレーショナル・キーは、http://www.oracle.com/jrockit/jvm
で始まります。JVMには様々なサブシステムがあり、vm
はランタイム、os
は実行しているオペレーティング・システム、java
は実行中のJavaプログラムをそれぞれ参照します。たとえば、JVMがネイティブ・レベルでロックに入った時点でトリガーされるイベントのキーは、次のように呼ばれています。
http://www.oracle.com/jrockit/jvm/vm/sync/mutex_enter
マスター・リレーショナル・キーは、http://www.oracle.com/jrockit/jvm
キー以外では、http://www.oracle.com/jrockit/jfr-info
が出現することがあります。これはフライト・レコーダの「メタ生成」を行います。したがって、JRockitフライト・レコーダ内部のイベント・タイプです。
デフォルトのフライト記録では、多数のイベント・タイプが有効になっていますが、サーバー側のテンプレートを通じてカスタマイズできます。
サーバー側のテンプレートは、.jfs
接尾辞が付けられたファイルです。JSONフォーマットのデータが含まれ、フライト記録の設定の変更または拡張に使用されます。通常、独自のサーバー側テンプレートを作成する必要はありませんが、必要な場合は、JROCKIT_HOME/jre/lib/jfr
フォルダにあるテンプレート・サンプルのいずれかを変更できます。
記録をカスタマイズするサーバー側テンプレートをOracle JRockit JVMに転送するには、-XX:FlightRecorderOptions
とsettings
サブフラグを使用するか、start_flightrecording
診断コマンドを使用します。settings
には、事前定義済のテンプレート名(テンプレートの場所: JROCKIT_HOME/jre/lib/jfr
)、または完全なカスタム・テンプレートを指定できます。
サーバー側テンプレートは1つのセクションで構成され、イベント・タイプとそのカスタマイズされたプロパティを表すリレーショナル・キーのマッピングが記述されています。イベント・タイプごとに、enable
、stacktrace
、threshold
およびperiod
プロパティを設定できます。
イベントを記録に含めるかどうかに応じて、enable
をtrue
またはfalse
に設定します。
イベントがトリガーされたポイントからスタック・トレースを収集するかどうかに応じて、stacktrace
をtrue
またはfalse
に設定します。
threshold
には、ログするイベントの最小期間を設定します(適用可能な場合)。
period
には、イベントをトリガーする頻度を設定します(リクエスト可能なイベントの場合)。たとえば、http://www.oracle.com/jrockit/jvm
キーの下の/java/statistics/exceptions
イベントで、例外の統計を収集する頻度を設定します。period
を0
に設定すると、それはコンスタントなイベント、つまり、1つの記録に1回のみ生成されるイベントを指定します(システム・プロパティのログなど)。適用可能な修飾子の数は、イベント・タイプごとに異なります。
サーバー側テンプレート・ファイル(.jfs
)の一般的な形式を例A-1に示します。
例A-1 サーバー側テンプレートの一般的な形式
{ <relational-key> : { <sub-key 1> : { <attribute> : <value> <attribute> : <value> ... <attribute> : <value> }, ... <sub-key 2> : { <attribute> : <value> <attribute> : <value> ... <attribute> : <value> }, }, ... }
コードの読みやすさを向上するため、通常、リレーショナル・キーは複数のレベルに分割されます。たとえば、記録でより詳細なJava I/O情報を有効にするサーバー側テンプレートを例A-2に示します。
例A-2 記録の詳細なJava I/O情報を有効にするサーバー側テンプレート
{ "http://www.oracle.com/jrockit/jvm/" : { // Socket/SocketChannel read/write "java/socket_*" : { "enable" : true, "stacktrace" : true }, // FileInputStream/RandomAccessFile/FileChannel read/write "java/file_*" : { "enable" : true, "stacktrace" : true } } }
属性およびリレーショナル・キーでワイルドカードを使用できます。例A-1で、記述子がhttp://www.oracle.com/jrockit/jvm/java/socket_
およびhttp://www.oracle.com/jrockit/jvm/java/file_
で始まるすべてのイベント・タイプが有効になります(スタック・トレースの記録の場合)。
単独で強力なワイルドカードを指定することもできます。たとえば、例A-3では、すべてのイベントの収集を強制的に有効化し、過剰なデータ量を回避するために最小期間1,000msが設定されています。
例A-3 すべてのイベント・タイプの収集を強制的に有効化
// Settings file for JRockit Flight Recorder enabling collection of all events { "*" : { "enable" : true, "stacktrace" : true, "threshold" : 0, "period" : 1000ms } }
機能を理解するために、JROCKIT_HOME/jre/lib/jfr
にあるプリインストールされたカスタム・テンプレートをコピーしてお試しください。
JRockitフライト・レコーダのリポジトリは複数のファイルで構成され、JRockit Mission Controlで1個ずつ開いていくと、時間のかかる面倒な作業になる可能性があります。フライト・レコーダ・ツールを使用すると、リポジトリのすべての記録ファイルを1つのファイルに連結し、JRockit Mission Controlで開くことができます。
連結ツールを使用するには、次のコマンドを入力します。
java oracle.jrockit.jfr.tools.ConCatRepository [directory] [-o output_filename] [-f]
引数を指定しない場合、現在のディレクトリのチャンク・ファイルからのタイムスタンプに基づいてファイルが作成されます。
directory
を指定すると、そのディレクトリがリポジトリとして使用されます。
-o
output_filename
を指定すると、output_filename
という名前のファイルになります。
-f
を指定すると、同じ名前の既存ファイルが上書きされます。