今まで、このチュートリアルのアナライザーで作成されたメイン・レポートに詳細情報を追加し続けてきました。このような詳細レポートは有用で、ある問題領域の専門家が読んで、現在分析しているダンプが出されたシステムに存在するさまざまな問題を手動で診断できます。しかし、可能であれば、アナライザーでいくつかの問題を自動的に診断し、検出した問題について、専門家でなくても誰でも容易に確認し、理解できる、簡単な記述を生成できれば便利です。これが、アナライザーから
所見を出力する機能の目的です。
所見とは、アナライザーによって自動的に検出された問題または潜在的な問題の簡単な記述で、エンド・ユーザーに注目させるものです。
この例では、潜在的な問題を示す適切な例として、すべてのプールに現在割り振られているスレッドの合計数が、すべてのプールが完全に使用された場合に許容されるスレッドの合計最大数の 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===========================================================================
- 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() メソッドを呼び出して
所見を出すために必要な計算を実行するだけです。
このメソッドは、このチュートリアルのアナライザーの
WASAnalyzerBase クラス (実際には、
WASAnalyzerBase 自体が基礎としているもっと深い共通基本クラス) から継承されます。以下のパラメーターを使用します。
- 重大度 (高/中/低)。この所見は実際の問題を示す可能性があること、または実際の問題となるかどうか分からないが疑問のある事実であることを反映するために規則によって使用されます。
- メッセージと、このメッセージの可変のパラメーター・セット。標準 java.text.MessageFormat クラスの構文に従ってフォーマット設定されます。
- レポート・オブジェクトへのオプションの参照。この参照が NULL 以外の場合、所見がそのレポートに挿入され、さらに Dump Analyzer ツール出力の先頭のすべての所見の要約に組み込まれます。レポート参照が NULL の場合、所見は Dump Analyzer ツール出力の先頭のすべての所見の要約に表示されるだけで、レポート内には表示されません。
ここで使用されている
logMessage() メソッドの定義および動作は、『
データ構造からの値の抽出』で、データ構造から情報を抽出中に発生した例外を報告するために使用した
logExceptionMessage() メソッドと多くの点で類似していることにお気付きかもしれません。これは偶然ではありません。一般的に、アナライザーから出されるメッセージ (
所見、エラー、その他の通知メッセージ) は、引数として適切な重大度レベルを指定して
logMessage() メソッドを呼び出することによって出される場合があります。ここでは、
所見に対応するいくつかの事前定義重大度レベルを使用します。この事前定義重大度レベルはすべて、
IMessageLogger インターフェースの API 資料に詳細に説明されています。
logExceptionMessage() は、
logMessage() を呼び出す前にいくつかのパラメーターを事前にフォーマット設定し、フィルター処理するために使用でき、特に分析中に発生したエラーを報告する場合 (これについては、特定の例外オブジェクトが用意されています) に使用できる簡単な手段です。
Dump Analyzer フレームワークの用語の注記
- 所見は、現在分析中のダンプを作成したシステムで検出された何らかの問題または潜在的な問題に対応します。これは、Dump Analyzer ツールおよびそのアナライザーからの目的とした出力であり、ツールおよびアナライザーが確実に完全でバグがない場合にも予期されます。
- エラーは、ダンプ・ファイルの破壊、Dump Analyzer ツールまたはあるアナライザーの障害、または完全な分析を妨げる何らかの他の問題のために、分析自体の実行中に発生した問題に対応します。これは、Dump Analyzer ツールおよびそのアナライザーからの望ましくない (しかし、必ずしも避けることができない) 出力です。
DTFJ 機能の起動