ヘッダーをスキップ
Java Platform, Standard Edition Java Flight Recorderランタイム・ガイド
リリース5.4
E59385-03
  目次へ移動
目次

前
 
次
 

2 Java Flight Recorderの実行

この章では、Java Flight Recorderを実行する方法について説明します。


注意:

Java Flight Recorderを本番で使用するには、商用ライセンスが必要です。商用機能の詳細とそれらを有効化する方法については、http://www.oracle.com/technetwork/java/javaseproducts/にアクセスしてください。

複数の記録を同時に実行し、各記録を異なる設定を使って構成できます。特に、記録ごとに異なるイベント・セットがキャプチャされるように構成できます。ただし、Java Flight Recorderの内部ロジックをできるだけ簡素化するために、結果の記録には常に、その時点でアクティブになっていたすべての記録のすべてのイベントの和集合が含まれます。これは、複数の記録が実行中の場合、必要だった情報より多くなる可能性があることを意味しています。これが混乱をまねく場合がありますが、それ以外の負の影響はありません。

JFRを使用するための最も簡単で、最も直感的な方法は、Java Mission Controlに統合されているFlight Recorderプラグインを使用することです。このプラグインを使用すると、直感的なGUIからJFR機能にアクセスできます。JMCクライアントを使用してJFRを制御する方法の詳細は、Java Mission ControlヘルプのFlight Recorderプラグインに関するセクションを参照してください。

この章では、JFR記録を実行および管理するためのより高度な方法について説明します。この章は、次のセクションで構成されています。

2.1コマンド行の使用

コマンド行から記録を開始したり構成したりするには、アプリケーションの起動時にjavaコマンドの-XX:StartFlightRecordingオプションを使用します。JFRの使用を有効化するには、-XX:+FlightRecorderオプションを指定します。JFRは商用の機能なので、-XX:+UnlockCommercialFeaturesオプションも指定する必要があります。次の例は、MyAppアプリケーションを実行し、すぐに60秒間の記録を開始し、それをmyrecording.jfrという名前のファイルに保存する方法を示しています。

java -XX:+UnlockCommercialFeatures -XX:+FlightRecorder -XX:StartFlightRecording=duration=60s,filename=myrecording.jfr MyApp

JFRを構成するには、-XX:FlightRecorderOptionsオプションを使用できます。詳細は、付録A、「コマンド行オプション」を参照してください。

2.2 診断コマンドの使用方法

Java固有の診断コマンドを使って記録を制御することもできます。診断コマンドの詳細は、付録A、「診断コマンド・リファレンス」を参照してください。

診断コマンドを実行するもっとも単純な方法は、(Javaインストール・ディレクトリにある) jcmdツールを使用することです。コマンドを発行するには、JVMのプロセス識別子(またはメイン・クラスの名前)と実際のコマンドを、jcmdの引数として渡す必要があります。たとえば、識別子が5368の実行中Javaプロセスで60秒間の記録を開始し、それを現在のディレクトリのmyrecording.jfrに保存するには、次を使用します。

jcmd 5368 JFR.start duration=60s filename=myrecording.jfr

実行中のすべてのJavaプロセスの一覧を表示するには、引数なしでjcmdコマンドを実行します。実行中Javaアプリケーションで使用可能なコマンドの完全な一覧を表示するには、プロセス識別子(またはメイン・クラスの名前)のあとに診断コマンドとしてhelpを指定します。Java Flight Recorderに関連するコマンドです。

  • JFR.start

    記録を開始します。

  • JFR.check

    指定されたプロセスで実行されているすべての記録のステータス(記録ID番号、ファイル名、期間など)をチェックします。

  • JFR.stop

    特定のID番号の記録を停止します(デフォルトでは記録1が停止されます)。

  • JFR.dump

    特定のID番号の記録によってその時点までに収集されたデータをダンプします(デフォルトでは記録1のデータがダンプされます)。


注意:

これらのコマンドが使用可能になるのは、Javaアプリケーションの起動時にJava Flight Recorderが有効化された場合、つまり次のオプションが使用された場合だけです。
-XX:+UnlockCommercialFeatures -XX:+FlightRecorder

2.3 記録の構成

明示的記録はほかにもいくつか方法で構成できます。これらの手法は、記録の開始方法(つまり、コマンド行アプローチを使用する方法、または診断コマンドを使用する方法)に関係なく同じように機能します。

2.3.1最大サイズや最大有効期間の設定

明示的記録が最大サイズや最大有効期間を持つように構成するには、次のパラメータを使用します。

  • maxsize=size
    

    キロバイトを示す文字kまたはK、メガバイトを示すmまたはM、ギガバイトを示すgまたはGを末尾に付加しますが、サイズをバイトで設定する場合は接尾辞を指定しないでください。

  • maxage=age
    

    秒を示す文字s、分を示すm、時を示すh、または日を示すdを末尾に付加します。

サイズと有効期間の両方の制限が指定された場合、どちらかの制限に達した時点でデータが削除されます。

2.3.2 遅延の設定

記録をスケジューリングする際には、実際に記録が開始されるまでの遅延を追加したい場合があります。たとえば、コマンド行から実行する場合に、アプリケーションがブートするか安定した状態に達してから記録を開始するのが望ましいといった場合です。これを実現するには、delayパラメータを使用します。

delay=delay

秒を示す文字s、分を示すm、時を示すh、または日を示すdを末尾に付加します。

2.3.3 圧縮の設定

記録ファイルの形式は非常にコンパクトですが、さらに圧縮するにはZIPアーカイブに追加します。圧縮を有効にするには、次のパラメータを使用します。

compress=true

圧縮にはCPUリソースが必要となるため、パフォーマンスに負の影響が及ぶ可能性があります。

2.4記録の自動作成

デフォルト記録で実行する場合、特定の条件が満たされるたびに現在のインメモリー記録データがファイルに自動保存されるように、Java Flight Recorderを構成できます。ディスク・リポジトリを使用する場合は、ディスク・リポジトリ内の現在の情報も含められます。

2.4.1終了時の記録の作成

JVMが終了するたびに記録データを指定されたパスに保存するには、次のオプションでアプリケーションを起動します。

-XX:FlightRecorderOptions=defaultrecording=true,dumponexit=true,dumponexitpath=path

pathは、記録を保存すべき場所に設定します。ディレクトリを指定した場合、そのディレクトリ内に、日付と時間を名前に持つファイルが作成されます。ファイル名を指定した場合は、その名前が使用されます。パスを指定しなかった場合は、現在のディレクトリに記録が保存されます。

2.4.2トリガーを使用した記録の作成

Java Mission Controlのコンソールを使用してトリガーを設定できます。トリガーとは、ルールによって指定される条件が真になるたびにアクションを実行するルールのことです。たとえば、ヒープ・サイズが100 MBを超えるたびにフライト記録が開始されるルールを作成できます。Java Mission Controlのトリガーは、JMX MBean経由で公開されたプロパティをルールへの入力として使用できます。これらは、フライト・レコーダ・ダンプだけでなく、その他のさまざまなアクションを起動できます。

トリガーは、JMXコンソールの「トリガー」タブで定義します。トリガーを作成する方法の詳細は、Java Mission Controlのヘルプを参照してください。

2.5 セキュリティ

Java Flight Recorderは、診断のみを目的としています。記録ファイルには、Javaコマンド行オプションや環境変数などの機密情報が含まれる可能性があります。記録ファイルの格納や転送を行う際には、診断コア・ファイルやヒープ・ダンプの場合と同様に細心の注意を払ってください。

表2-1では、JFRを使用する様々な方法に対するセキュリティ権限について説明します。

表2-1 セキュリティ権限

方法 セキュリティ

コマンド行

Javaプロセスのコマンド行にアクセスできるすべての人が信頼されている必要があります。

診断コマンド

Javaプロセスの所有者のみがjcmdを使ってプロセスを制御できます。

Java Mission Controlクライアント

Java Mission ControlクライアントはJMXを使ってJVMにアクセスします。


2.6 トラブルシューティング

Java Flight Recorderから大量の診断情報を収集するには、次のオプションのいずれかでJVMを起動します。

  • -XX:FlightRecorderOptions=loglevel=debug

  • -XX:FlightRecorderOptions=loglevel=trace.