ヘッダーをスキップ
Oracle® JRockitフライト・レコーダ・ラン・タイム・ガイド
リリースR28
B61448-03
  目次へ移動
目次

前
 
次
 

1 概要

この章では、Oracle JRockitフライト・レコーダの概要を示します。次のセクションが含まれます:

1.1 概要

動作中のJavaプログラムでは、実際にどのような処理が実行されているのでしょうか。時間の流れを遡って、問題が発生する直前に何が起きたかを分析したいと思いませんか。パフォーマンスに影響を与えることなく、非常に詳細なプロファイリングを実行したいと思いませんか。JRockitフライト・レコーダは、これらのすべての目標を満たすように設計されています。

JRockitフライト・レコーダはJVMのコアに密接に統合されており、パフォーマンス・オーバーヘッドを意識して、このすべてを実行します。JRockitフライト・レコーダは、JVM内の動作およびJVMで実行中のJavaプログラムについて豊富な情報を提供します。この情報を使用して、プロファイリングおよび問題の根本的原因を解析できます。JRockitフライト・レコーダは、負荷の高い、稼働中の本番環境でもパフォーマンス・オーバーヘッドをもたらすことなく、常時実行できます。

JRockitフライト・レコーダは、JVMの詳細を記録するだけでなく、Oracle Fusion Middleware製品ファミリにも密接に統合されており、システムについての大量の情報を表示します。Javaサーブレットおよびデータベースの実行などのハイレベルな情報から、スレッドの同期およびガベージ・コレクションに関する非常に細かい情報まで、すべての情報をいつでも入手できます。

JRockitフライト・レコーダは、JVM内に設置される記録エンジンと、JRockit Mission Controlクライアントで構成されています。エンジンで作成される記録ファイルは、後でクライアントを使用して分析できます。このドキュメントでは、主に最初の部品、つまりJVMを取り上げています。JRockit Mission ControlのGUIについては、ごく簡単に説明します(第2章「簡単な起動手順」を参照)。

1.2 フライト・レコーダの使用

JRockitフライト・レコーダの主な効用は次の3つです。

1.2.1 プロファイリング

JRockitフライト・レコーダでは、動作中のシステムに関する大量のデータが次々に保存されていくため、プロファイラとして運用できます。プロファイリングの情報としては、プログラムのどの部分に時間がかかっているかを示すスレッド・サンプル、ロックのプロファイル、ガベージ・コレクションの詳細などがあります。

1.2.2 ブラック・ボックスの問題解析

航空機器にちなんで名前が付けられているように、JRockitフライト・レコーダは「ブラック・ボックス」としても機能し、次々と循環バッファに情報が保存されていきます。異常が検出されたとき、この情報にアクセスできます。この情報は、デプロイされたシステムのパフォーマンス問題の迅速な検出に不可欠です。

1.2.3 サポートおよびデバッグ

JRockitフライト・レコーダが提供する情報は、Oracleサポート担当者がソフトウェアの問題を診断する際に重要な手がかりとなります。

1.3 イベントを理解する

JRockitフライト・レコーダの根底にある基本原理は、記録されるすべてのデータがイベントだということです。イベントは、特定の時点で実行中のアプリケーションに発生します。イベントには、名前、タイムスタンプ、およびオプションとしてペイロードがあります。ペイロードは、イベントのタイプごとに異なります。例:

ほとんどのイベントには、名前とタイムスタンプの他に、イベントが発生したスレッドに関する情報、イベントをキャプチャした時点でのスタック・トレース、およびイベントの期間の情報もあります。JRockitフライト・レコーダのすべてのタイムスタンプには、ナノ秒単位の精度があります。

リクエスト可能なイベントは、記録エンジンが一定の頻度でポーリングできるイベントです。CPUロード・サンプルは、リクエスト可能なイベントの例です。このイベントを1秒に1回ポーリングするように記録エンジンを構成できます。

イベントから得られる情報を使用して、JRockitフライト・レコーダのUIにより、プログラムの実行中に起きたことを詳細に再現できます。

すべてのイベントの一覧は、付録C「イベント」を参照してください。

1.4 パフォーマンス・オーバーヘッド

JRockitフライト・レコーダは、オーバーヘッドを最小限に抑えるように設計されています。デフォルトの設定を使用した場合、社内テストでもお客様の環境でもパフォーマンスへの影響は1%未満です(< 1%)。この割合はアプリケーションによって異なり、著しく低い場合もあります。

JRockitフライト・レコーダは、非常に詳細なレベルで稼働中のシステムをモニターします。これにより、JRockitフライト・レコーダで処理可能な大量のデータが生成されます。JRockitフライト・レコーダは、できるだけ早期にデータをフィルタして低いオーバーヘッドを維持します。これは、次の2つの方法で行われます。

1.5 メモリーおよびディスク・バッファ

JRockitフライト・レコーダは、イベントが発生したとき、即座にディスクに書き込みません。かわりに、メモリー内バッファの階層にデータを格納し、バッファが一杯になったらデータをディスクに移動します。JRockitフライト・レコーダ・ラン・タイムは、最初に、スレッドのローカル・バッファにイベントのデータを挿入するので、イベントごとにスレッドを同期する必要がなく、スループットが大幅に向上します。スレッドのローカル・バッファがいっぱいになると、データがグローバル・バッファに転送されます。転送されると、スレッド間の同期が必要になりますが、スレッドのローカル・バッファごとに満杯になる速さが異なるため、ロックの競合はほとんど発生しません。最後にグローバル・バッファも領域不足になり、バッファ内の内容がディスクに書き込まれます。ディスクへの書込みはコストがかかるので、できる限り最小限に抑える必要があります。ディスク・ファイルに書き込まれると、独自のバイナリ形式のファイルが作成され、非常にコンパクトなだけでなく、アプリケーションでの読取り/書込みを効率的に行うことができます。

ディスクにデータをまったく書き込まないようにJRockitフライト・レコーダを設定できます。このモードでは、グローバル・バッファが循環バッファとして機能し、バッファがいっぱいになると最も古いデータが削除されます。このオーバーヘッドが非常に低いオペレーティング・モードでも、問題の根本的原因の解析に必要なすべての重要なデータが収集されます。最新のデータはいつでもグローバル・バッファから取得できるため、オペレーションまたは検査システムによって問題が検出されたときに、オンデマンドでディスクに書き込めます。

1.6 ガベージ・コレクションおよびフライト・レコーダ

フライト・レコーダでは、記録を行うたびに特別なガベージ・コレクションが生成されます。これは、冗長出力(-Xverbose:gc=debugを指定して実行)のガベージ・コレクション・データ・セクションにJFR Heap Block StatisticsまたはJFR Class Statisticsとして表示されます。次に例を示します。

[DEBUG][memory ] [OC#1] GC reason: Artificial, description: JFR Heap Block Statistics.