この章では、JRockitフライト・レコーダのデフォルトの記録を開始する方法と、コマンドラインから明示的に記録を開始する方法を説明します。
この章の内容は次のとおりです。
JRockitフライト・レコーダでは、多数の記録を同時に実行できます。記録ごとに異なる設定を使用して構成できます。とりわけ、記録ごとに異なるイベント・セットをキャプチャするように構成できます。ただし、フライト・レコーダの内部ロジックをできる限り効率化するために、作成される記録には、その時点でアクティブなすべての記録に関するすべてのイベントの和集合が常に含まれます。つまり、複数の記録を実行すると、必要以上に多くの情報が記録される可能性があります。これはいくらか複雑になる場合がありますが、その他の悪影響はありません。
デフォルトの記録は、パラメータを設定することなく自動的に開始される記録です。この項では、デフォルトの記録を開始する方法、およびその記録のディスク記憶域の構成について説明します。次の情報が含まれます:
3.2「デフォルトの記録の実行」に示すように、Oracle JRockitでは、デフォルトの記録を常時バックグラウンドで実行することができます。Oracle JRockitの現在のリリースでは、この機能はデフォルトで無効に設定されていますが、起動コマンド-XX:FlightRecorderOptions
を使用すると簡単に有効にできます。実際に、パフォーマンスへの影響が非常に小さいうえ、データの価値は高いため、本番環境でもデフォルトの記録を有効にすることをお薦めします。JVMのメモリー内ブラック・ボックス記録を有効にするには、次のコマンドライン・オプションを使用します。
-XX:FlightRecorderOptions=defaultrecording=true
-XX:FlightRecorderOptions
起動コマンドに特定のパラメータを追加すると、ディスク・リポジトリの場所およびそのリポジトリに格納されるデータ量を構成できます。
JRockitフライト・レコーダではデフォルトで、java.io.tmpdir
システム・プロパティで指定されたパスに一時記録ファイルが格納されます。ただし、次のパラメータを追加することにより、このパスを変更できます。
repository=<path>
<path>
は、推奨されるリポジトリの場所です(例: /var/log/jfr
)。
maxsize
オプションを使用すると、デフォルトの記録でリポジトリに格納されるデータ量を絶対バイト数として構成できます。たとえば、100MBのディスク領域を使用して記録データを格納するようにこのオプションを設定できます。
また、maxage
オプションを使用して、常に一定の分数または時間数分のデータを格納するように指定することもできます。この場合、指定した有効期間より古いデータのみが破棄されます。この強力な方法により、問題の発生に至るまでのデータが、少なくともある期間に関しては、必ず存在することが確約されます。
maxsize
およびmaxage
に値を指定しない場合は、デフォルト値が使用されます。これらのオプションの詳細は、Oracle JRockitコマンドライン・リファレンスの-XX:FlightRecorderOptions
の説明を参照してください。
最大サイズを設定するには、maxsize
オプションを次のように使用します。
maxsize=<size>
size
は、k
(キロバイト)、m
(メガバイト)およびg
(ギガバイト)で指定できます。例: 5m
最大有効期間を設定するには、maxage
オプションを次のように使用します。
maxage=<age>
age
は、s
(秒)、m
(分)、h
(時)またはd
(日)で指定できます。例: 10s
デフォルト値は15分です。
一時データを/var/log/jfr
ディレクトリに格納し、最低でもアプリケーション実行の最後の5分間分のデータを確保するようなデフォルト記録を有効にする場合は、次のコマンドライン・オプションを使用します。
-XX:FlightRecorderOptions=defaultrecording=true,disk=true,repository=/var/log/jfr,maxage=5m
デフォルトでは、記録は現在の作業ディレクトリに保存されます。
デフォルトの記録に加えて、明示的な記録を作成できます。明示的な記録は、ユーザーが明示的に開始し、事前に定義した時間または手動で停止するまで実行される記録です。この項では、明示的な記録の実行方法を説明します。次の情報が含まれます:
どのような方法で記録を開始した場合でも、使用可能なパラメータ・セットは同じです。明示的な記録の管理には、次のツールを使用できます。
JRockitフライト・レコーダを最も簡単な方法で管理するには、Oracle JRockit Mission Control Clientを使用します。詳細は、2.1「JRockit Mission Control Clientの使用」を参照してください。
-XX:StartFlightRecording
起動オプションを使用すると、コマンドラインから記録を開始および構成できます。
-XX:StartFlightRecording=duration=<duration>,filename=<filename>
このコマンドを指定すると、JVMの起動後すぐに記録が開始されます。記録は指定したduration
で実行され、指定したfilename
に保存されます。たとえば、60秒間の記録を開始し、結果を現在のディレクトリのmyrecording.jfr
に保存するには、次のコマンドを使用します。
-XX:StartFlightRecording=duration=60s,filename=myrecording.jfr
その他のオプションを使用して、明示的な記録の詳細を構成できます。詳細は、B.1「起動コマンド」またはOracle Technology NetworkのOracle JRockitコマンドライン・リファレンスを参照してください。
JRockit固有の診断コマンドを使用して、記録を管理することもできます。診断コマンドの詳細は、B.2「診断コマンド・リファレンス」を参照してください。診断コマンドの最も簡単な実行方法としては、JRockitインストールでJROCKIT_HOME/bin/jrcmd
(またはJROCKIT_HOME\bin\jrcmd.exe
)実行可能ファイルを使用します。jrcmdでの診断コマンドの発行には、次の形式を使用します。
jrcmd <pid> <command>
<pid>
はコマンドの送信先JVMのPIDで、<command>
は診断コマンドです。
注意: パラメータを1つも指定せずにjrcmdを実行すると、実行中のJavaのプロセスとそのPIDのリストが返されます。 |
使用可能なコマンドのリストを表示するには、次のように入力します。
jrcmd <pid> help
ほとんどの場合、このリストに、関連のあるコマンドであるstart_flightrecording
、check_flightrecording
およびstop_flightrecording
が表示されます。
コマンドの詳細なヘルプを表示するには、次のように入力します。
jrcmd <pid> help <command>
jrcmdの使用方法の詳細は、『Oracle JRockit JDKツール・ガイド』のjrcmdの使用方法に関する項を参照してください。
診断コマンドにより、実行中のJRockitインスタンスでフライト記録を開始できます。たとえば、60秒間の記録を開始し、現在のディレクトリのmyrecording.jfr
に保存するには、次のjrcmdコマンドを入力します。
jrcmd <pid> start_flightrecording duration=60s filename=myrecording.jfr
現在実行中の記録とそのステータスを確認するには、check_flightrecording
コマンドを使用します。たとえば、次のように入力した場合:
jrcmd <pid> check_flightrecording
記録が終了する前にそれを実行すると、次のような情報が表示されます:
recording : id=1 name="myrecording.jfr" duration=60s dest="myrecording.jfr" compress=false (running)
これにより、記録がまだ実行中であることがわかります。
期間オプションを指定して記録を開始した場合は、その時間の経過後に記録は自動的に停止します。期間を指定せずに記録を開始することもできます。その場合は、明示的に停止するまで実行し続けます。明示的に停止するには、stop_flightrecording
診断コマンドを使用します。
jrcmd <pid> stop_flightrecording recording=1
recording
パラメータに、停止する記録を指定します。このパラメータの値は、check_flightrecording
で出力されるid
です。
明示的な記録の構成には、様々な方法があります。これらの手法は、記録を開始した方法がコマンドライン操作であるか診断コマンドの使用かにかかわらず、同じ効果があります。この項の内容は次のとおりです。
デフォルトの記録と同様に、明示的な記録の最大サイズまたは有効期間を設定できます。これらの概念についての詳細は、3.2.2「ディスク記憶域の構成」を参照してください。開始時にサイズおよび有効期間を設定するには、次のパラメータを使用します。
最大サイズの設定:
maxsize=<size>
size
は、k
(キロバイト)、m
(メガバイト)およびg
(ギガバイト)で指定できます。例: 10m
最大有効期間の設定:
maxage=<age>
age
は、s
(秒)、m
(分)、h
(時)またはd
(日)で指定できます。例: 10s
サイズ制限と有効期間の両方を指定した場合、有効期間より古くなるか、サイズ制限を超過したときにデータは削除されます。
記録をスケジュールするとき、実際に記録が開始される前に遅延を追加することができます。たとえば、コマンドラインから実行する場合、アプリケーションが起動または安定した状態になってから記録を開始することができます。記録の開始を遅延させるには、delay
パラメータを使用します。
delay=<delay>
遅延期間は、s
(秒)、m
(分)、h
(時)またはd
(日)で指定します。例: 10s
記録のファイル形式は非常にコンパクトですが、記録をさらに圧縮できます。自動的に記録を圧縮させるには、次のパラメータを使用します。
compress=true
圧縮はCPUをかなり消費するので、記録を圧縮するとパフォーマンスに悪影響を与える可能性があります。
デフォルトの記録を実行する場合、一定の条件が発生したときに、現在のメモリー内の記録データがファイルに自動的に保存されるようにJRockitフライト・レコーダを構成できます。ディスク・リポジトリを使用している場合は、ディスク・リポジトリ内の現在の情報も含まれます。この項の内容は次のとおりです。
JVMの終了時に常に記録データを保存するには、次のコマンドを使用します。
-XX:FlightRecorderOptions=dumponexit=true,dumponexitpath=<path>
<path>
を、記録を保存する場所に設定します。ディレクトリを指定すると、一意の名前を付けられたファイルがそのディレクトリに作成されます。ファイル名を指定した場合は、その名前が使用されます。パスを指定しない場合、記録は現在のディレクトリに保存されます。
未処理の例外(スレッドの例外ハンドラによって捕捉されず、スレッドを終了させる例外)が発生したときに記録を作成するには、-XX:+FlightRecordingDumpOnUnhandledException
起動コマンドを使用します。
-XX:FlightRecordingDumpPath
=
<path
起動コマンドを使用して、記録ダンプの場所を指定します。
<path>
に適用される規則は、3.5.1「終了時に記録を作成する」の場合と同じです。
JRockit Mission Controlのコンソールを使用してトリガーを設定できます。トリガーは一種のルールであり、そのルールで指定された条件が真のときにアクションを実行します。たとえば、ヒープ・サイズが100MBを超過したときにフライト記録の開始をトリガーするルールを作成できます。JRockit Mission Controlのトリガーでは、JMX MBeanにより公開された任意のプロパティをルールの入力として使用できます。トリガーはフライト・レコーダのダンプのみならず、他の多数のアクションを起動できます。
JRockit Mission ControlコンソールのMBeanのページの「トリガー」タブで、トリガーを定義します。トリガーの作成についての詳細は、JRockit Mission Controlのオンライン・ヘルプを参照してください。
実行中のデフォルトの記録から自動的に記録データをダンプできるほか、次の診断コマンドを使用して手動でもダンプできます。
jrcmd <jrockit pid>
dump_flightrecording id=<id> copy_to_file=<path>
上記のコマンドは、指定された<id>
によって識別される記録にある現在のデータを、<path>
で指定されたファイルにダンプします。ダンプした記録を自動的に圧縮させるには、次を追加します。
compress_copy=true
診断コマンドの詳細は、B.2「診断コマンド・リファレンス」を参照してください。
さらに、JRockit Mission Control Clientを使用して記録データをダンプできます。次の手順を実行します。
Mission Controlコンソールで、JVMブラウザのJVMを右クリックします。
「デフォルトの記録のダンプ」を選択します。