チュートリアル: WebSphere Application Server の診断用の Dump Analyzer モジュールの作成

所見の生成

今まで、このチュートリアルのアナライザーで作成されたメイン・レポートに詳細情報を追加し続けてきました。このような詳細レポートは有用で、ある問題領域の専門家が読んで、現在分析しているダンプが出されたシステムに存在するさまざまな問題を手動で診断できます。しかし、可能であれば、アナライザーでいくつかの問題を自動的に診断し、検出した問題について、専門家でなくても誰でも容易に確認し、理解できる、簡単な記述を生成できれば便利です。これが、アナライザーから所見を出力する機能の目的です。所見とは、アナライザーによって自動的に検出された問題または潜在的な問題の簡単な記述で、エンド・ユーザーに注目させるものです。

この例では、潜在的な問題を示す適切な例として、すべてのプールに現在割り振られているスレッドの合計数が、すべてのプールが完全に使用された場合に許容されるスレッドの合計最大数の 80% を超える場合を想定します。このことは、WebSphere Application Server プロセスが、許可されたほとんどすべてのリソースを使用していて過負荷に近づいていることを示します。これは、現実の潜在的な問題を示す例として実際には適切でない場合がありますので、注意してください。しかし、これは単純であり、この簡単な例で原則を描写するために使用しています。

これを実装するために、produceReport() の最後近くの、前の『データ構造からの値の抽出』トピックで追加した numberOfAllocatedThreads および numberOfPossibleThreads 状態変数の値の計算を終了した箇所の後に、次のコードを追加します。
/*
 * A threshold to warn of possible thread overload (% of allocated vs. possible threads)
 * (not necessarily appropriate for actual problem detection; just to show the principle of such observations)
 */
final int THREAD_OVERLOAD_THRESHOLD = 80;

if (numberOfAllocatedThreads > ((THREAD_OVERLOAD_THRESHOLD / 100.0f) * numberOfPossibleThreads)) { logMessage(IMessageLogger.LEVEL_DBDA_OBSERVATION_LOW, "(minor observation) This process is currently using more than {0}% of all possible threads ({1}/{2})", new Object[] { new Integer(THREAD_OVERLOAD_THRESHOLD), new Integer(numberOfAllocatedThreads), new Integer(numberOfPossibleThreads) }, out); }

Dump Analyzer ツールの実行全体からの出力の先頭であり、このチュートリアルのアナライザーからのメイン・レポートの出力よりもかなり前の、このコードからの出力は次のようになります。
DumpAnalyzer V:1.2.0.20080114185939 starting analysis of server1.dmp.zip

===========================================================================
  1. Observations
===========================================================================

(minor observation) This process is currently using more than 80% of all possible threads (380/433)

=========================================================================== 2. Analysis results ===========================================================================

...

出力の先頭の「Observations」セクションには、Dump Analyzer ツールのこの実行中に実行されたすべてのアナライザーから出されたすべての所見のリストが含まれています。

さらに、observation にはそれぞれ、出したアナライザーのレポートの本文内の行も表示されるため、そのレポートの他の情報のコンテキストで確認できます。
...

Current number of pool threads: 380 Maximum possible number of pool threads: 433 ---- > OBSERVATION: (minor observation) This process is currently using more than 80% of all possible threads (380/433)

...

所見は必ずしも問題の確信度を反映していません。所見を使用して、問題とある程度関連している可能性があるが確信のない重大な事実を報告できます。しかし重要なのは、所見はできるだけ少なく、適切なものにして、専門家ではないユーザーがレポート全体を読んで理解しなくても、素早く参照して、潜在的な問題を適切に洞察できるようにすることが必要です。所見の標準的な例は「デッドロックの検出」です。これは確実に問題を示すケースです。

logMessage() メソッド

この所見を出すコードは単純です。アナライザーの本体で、所見が正当化されているかどうかを判別し、そうであれば、logMessage() メソッドを呼び出して所見を出すために必要な計算を実行するだけです。

このメソッドは、このチュートリアルのアナライザーの WASAnalyzerBase クラス (実際には、WASAnalyzerBase 自体が基礎としているもっと深い共通基本クラス) から継承されます。以下のパラメーターを使用します。

logExceptionMessage() メソッドとの類似性

ここで使用されている logMessage() メソッドの定義および動作は、『データ構造からの値の抽出』で、データ構造から情報を抽出中に発生した例外を報告するために使用した logExceptionMessage() メソッドと多くの点で類似していることにお気付きかもしれません。これは偶然ではありません。一般的に、アナライザーから出されるメッセージ (所見、エラー、その他の通知メッセージ) は、引数として適切な重大度レベルを指定して logMessage() メソッドを呼び出することによって出される場合があります。ここでは、所見に対応するいくつかの事前定義重大度レベルを使用します。この事前定義重大度レベルはすべて、IMessageLogger インターフェースの API 資料に詳細に説明されています。

logExceptionMessage() は、logMessage() を呼び出す前にいくつかのパラメーターを事前にフォーマット設定し、フィルター処理するために使用でき、特に分析中に発生したエラーを報告する場合 (これについては、特定の例外オブジェクトが用意されています) に使用できる簡単な手段です。

Dump Analyzer フレームワークの用語の注記

次のトピック

DTFJ 機能の起動