|
WebLogic 診断フレームワークのインスツルメンテーション ライブラリには診断モニタと診断アクションが含まれています。以下の節では、これらのライブラリについて説明します。
インスツルメンテーション ライブラリの項目の使い方については、「インスツルメンテーションのコンフィグレーション」を参照してください。
診断モニタは、サーバ スコープのモニタとアプリケーション スコープのモニタに大別されます。サーバ スコープのモニタは WebLogic Server クラスのインスツルメントに使用できます。アプリケーションスコープのモニタはアプリケーション クラスのインスツルメントに使用します。DyeInjection
モニタを除くすべてのモニタは代理モニタで、組み込みの診断アクションがありません。代わりに、モニタにアタッチされているアクションに委託して、診断アクティビティを実行します。
すべてのモニタには、それぞれのポイントカットがあらかじめコンフィグレーションされています。ただし、その作用を受ける実際の場所はインスツルメントされるクラスによって異なります。たとえば、Servlet_Before_Service
モニタでは、さまざまなサーブレット実装のいろいろな場所にあるサーブレットまたは Java Server Page (JSP) サービス メソッドの入り口に診断コードが追加されます。
すべての代理モニタには、対応するアクションのみをアタッチできます。対応するかどうかはモニタの性質によって決まります。
次の表では、サーバ スコープ (WebLogic Server クラス) 内で使用できる診断モニタをリストして説明します。各モニタに対応する診断アクションについては、表の対応アクション タイプ カラムを参照してください。
表 B-2 には、アプリケーション スコープ (デプロイ済みアプリケーション) 内で使用できる診断モニタをリストします。各モニタに対応する診断アクションについては、表の対応アクション タイプ カラムを参照してください。
診断アクション ライブラリには、以下のアクションが含まれます。
これらの診断アクションは、上の 2 つの表で説明した代理モニタで使用できます。また、ユーザが定義してアプリケーション内で使用できるカスタム モニタと一緒に使用することもできます。各診断アクションは、対応モニタ タイプ カラムに示されている対応するモニタとのみ一緒に使用できます。一部のアクション (TraceElapsedTimeAction
など) はイベント ペイロードを生成します。
このアクションは Stateless アクションで、Before および After モニタ タイプに対応しています。
TraceAction
は、プログラムの実行中に作用場所に追跡イベントを生成します。以下の情報が生成されます。
このアクションは Stateless アクションで、Before および After モニタ タイプに対応しています。
DisplayArgumentsAction
は、プログラムの実行中に作用場所にインスツルメンテーション イベントを生成し、メソッドの引数または戻り値をキャプチャします。
このアクションが実行されると、イベント アーカイブにディスパッチされるインスツルメンテーション イベントが発生します。インスツルメンテーション イベントが before モニタにアタッチされた場合は、ジョインポイントへの入力引数 (たとえばメソッド引数) がキャプチャされます。インスツルメンテーション イベントが after モニタにアタッチされた場合は、ジョインポイントからの戻り値がキャプチャされます。イベントは、以下の情報を保持します。
このアクションは Around アクションで、Around モニタ タイプに対応しています。
TraceElapsedTimeAction
は 2 つのイベント (プログラム実行中の特定の場所の前と後) を生成します。
このアクションが実行されると、関連付けられたジョインポイントの実行前と実行後のタイムスタンプがキャプチャされます。そして、これらの差を計算することで経過時間が算出されます。このアクションでは、イベント アーカイブにディスパッチされるインスツルメンテーション イベントが生成されます。経過時間は、イベント ペイロードとして格納されます。イベントは、以下の情報を保持します。
このアクションは Stateless アクションで、Before および After モニタ タイプに対応しています。
StackDumpAction
は、プログラムの実行中に作用場所にインスツルメンテーション イベントを生成し、スタック ダンプをキャプチャします。
このアクションが実行されると、イベント アーカイブにディスパッチされるインスツルメンテーション イベントが生成されます。スタック トレースは、イベント ペイロードとしてキャプチャされます。イベントは、以下の情報を保持します。
このアクションは Stateless アクションで、Before および After モニタ タイプに対応しています。
ThreadDumpAction
は、プログラムの実行中に作用場所にインスツルメンテーション イベントを生成し、スレッド ダンプをキャプチャします (基底の VM でサポートされている場合)。JDK 1.5 (Oracle JRockit および Sun) ではこのアクションをサポートします。
このアクションでは、イベント アーカイブにディスパッチされるインスツルメンテーション イベントが生成されます。このアクションは JRockit JVM でのみ使用できます。他の JVM の場合は無視されます。スレッド ダンプは、イベント ペイロードとしてキャプチャされます。イベントは、以下の情報を保持します。
このアクションは Around アクションで、Around モニタ タイプに対応しています。
MethodInvocationStatisticsAction
は、各呼び出しに対してイベントを永続化せずに、メモリ内のメソッド呼び出し統計データを計算します。このアクションにより、収集された情報が InstrumentationRuntimeMBean
を介して利用できます。収集された情報は、ハーベスタ コンポーネントや監視と通知コンポーネントで使用できます。これによって、インスツルメンテーション システムからの要求情報と他の実行時 MBean からのメトリック情報を結合可能な監視ルールを作成することができます。
任意のスコープの WLDFInstrumentationRuntimeMBean インスタンスは、MethodInvocationStatisics 属性を使用して、コンフィグレーションされている診断 Around モニタにアタッチされている MethodInvocationStatisticsAction インスタンスから収集したデータをエクスポーズします。この属性が、以下のセマンティクスを持つネストされた構造を持つマップを返します。
MethodInvocationStatistics::= Map<className, MethodMap>
MethodMap::= Map<methodName, MethodParamsSignatureMap>
MethodParamsSignatureMap::= Map<MethodParamsSignature, MethodDataMap>
MethodDataMap::= <MetricName, Statistic>
MetricName:= min | max | avg | count | sum | sum_of_squares | std_deviation
エントリの最初のレベルのキーは、完全修飾クラス名です。次のレベルでは MethodMap というマップを生成しています。このマップのキーはメソッドの名前と別のネストされたマップ構造 MethodParamsSignatureMap の値です。MethodParamsSignatureMap は、メソッド入力引数シグネチャの文字列表現をキーとするエントリを持ち、別のマップ インスタンス MethodDataMap を返します。MethodDataMap は、サポートされているさまざまなメトリックの名前用の固定されたキー セットを持ちます。
MethodInvocationStatisticsAction インスタンスで集めたデータをハーベスタで収集するようにコンフィグレーションするには、WLDFHarvesterBean のインスタンスを次の指定とともにコンフィグレーションする必要があります。
Name=weblogic.management.runtime.WLDFInstrumentationRuntimeMBean
スコープはインスタンスのコンフィグレーションによって選択されます。
属性の指定では、ハーベスタで収集するデータを定義します。マップの一連の要素には、次の表記法でアクセスします。
MethodInvocationStatistics(className)(methodName)(methodParamSignature)
(metricName)
メソッドの入力引数の型をカンマ区切りのリストで表す文字列。シグネチャの指定では、引数名を除いた Java 型名のみを含めます。Java 言語と同様に、シグネチャ内のパラメータの順序には意味があります。この要素ではワイルドカード「*」も使用できるため、メソッドの入力引数の型のリストを完全に指定する必要はありません。「*」は、methodParamSignature 式での指定箇所以降の位置で 0 個以上の引数の型に一致します。どちらのワイルドカードも式内の任意の場所に指定できます。「MethodInvocationStatistics の例」を参照してください。
package.com.foo;
public interface Bar {
public void doIt();
public void doIt(int a);
public void doit(int a, String s)
public void doIt(Stringa, int b);
public void doIt(String a, String b);
public void doIt(String[] a);
public void doNothing();
public void doNothing(com.foo.Baz);
}
MethodInvocationStatistics(com.foo.Bar)(*)(*)(*)
com.Foo.Bar
クラス内のすべてのメソッドのすべての統計データを収集します。MethodInvocationStatistics(com.foo.Bar)(doIt)()(*)
doIt()
メソッドのすべての統計データを収集します。MethodInvocationStatistics(com.foo.Bar)(doIt)(*)(*)
doIt()
メソッドのすべての統計データを収集します。MethodInvocationStatistics(com.foo.Bar)(doIt)(int, *)(*)
doIt(int)
メソッドと doIt(int, String)
メソッドのすべての統計データを収集します。MethodInvocationStatistics(com.foo.Bar)(doIt)(String[])(*)
doIt(String[])
メソッドのすべての統計データを収集します。配列パラメータでは、型名の後に []
のペアを使用します。ハーベスタではスペースは不要です。MethodInvocationStatistics(com.foo.Bar)(doIt)(String, ?)(*)
doIt(String, int)
メソッドと doIt(String, String)
メソッドがこれに該当します。MethodInvocationStatistics(com.foo.Bar)(doNothing)(com.foo.Baz)(min|max)
com.foo.Baz
型の単一の入力パラメータを持つ doNothing()
メソッドの最小および最大の実行時間を収集します。注意 : | className にワイルドカードを使用すると、パフォーマンスに影響する場合があります。 |
監視ルールで MethodInvocationStatistics メトリックを使用するには、前の節で説明した同じ構文を使用できます。MetricName 要素でワイルドカードを使用する代わりに、特定のメソッドに対して min
、max
、avg
、count
、sum
、sum_of_squares
、または std_deviation
変数の中から必要な変数を指定して、意味のある監視ルールを作成することができます。
JMX を使用してデータを収集する際に WLDFInstrumentationRuntimeMBean
に対して getAttribute(“MethodInvocationStatistics”)
メソッドを呼び出すと、サーバのパフォーマンスに影響する場合があります。これは、インスツルメントされたクラスによっては、ネストされたマップ構造に高価なシリアライゼーションを伴う大量のデータが含まれる場合があるためです。
JMX を使用してデータを収集する場合は、getMethodInvocationStatisticsData(String)
メソッドを使用することをお勧めします。