Java Platform, Enterprise Edition アプリケーションでのハング・スレッド

WebSphere® Application Server は、スレッド・アクティビティーをモニターし、スレッド・アクティビティーが非アクティブになった場合は診断アクションを実行します。

スレッドがスレッド・モニターしきい値で定義された時間よりも長くアクティブになっていることを WebSphere が検出すると、アプリケーション・サーバーは以下のアクションを実行します。
  • ハングしているスレッドの名前と、そのスレッドが既にアクティブになっている時間を示す警告を WebSphere Application Server ログに記録します。 次のメッセージがログに書き込まれます。
    WSVR0605W: スレッド threadname がアクティブになっています。 
    hangtime 。ハングしている可能性があります。  totalthreads があります。 
    ハングしている可能性がある、サーバー内の合計スレッド数。
    ここで、threadname は JVM スレッド・ダンプ内に表示される名前であり、 hangtime はスレッドがアクティブになってからの概算経過時間を示し、 totalthreads はシステム・スレッドの全体的な評価を示します。
  • Java™ Management Extensions (JMX) 通知を発行します。 この通知はサード・パーティー・ツールを使用可能にして、 イベントをキャッチし、サーバーの JVM スレッド・ダンプのトリガーや、 電子ページまたは E メールの発行など、適切なアクションをとります。 以下の JMX 通知イベントは、 com.ibm.websphere.management.NotificationConstants クラス内に定義されます。
    • TYPE_THREAD_MONITOR_THREAD_HUNG このイベントは、 (潜在的な) ハング・スレッドの検出によってトリガーされます。
    • TYPE_THREAD_MONITOR_THREAD_CLEAR このイベントがトリガーされるのは、 これまでハングしていると報告されていたスレッドが作業を完了した場合です。 詳しくは、偽のアラームについてのセクションを参照してください。
  • パフォーマンス・モニター・インフラストラクチャー (PMI) データ・カウンター内の変更をトリガーします。 これらの PMI データ・カウンターは、パフォーマンス分析を提供するために、Tivoli ® Performance Viewer などのさまざまなツールによって使用されます。
  • パフォーマンス・モニター・インフラストラクチャー (PMI) データ・カウンター内の変更をトリガーします。 これらの PMI データ・カウンターは、パフォーマンス分析を提供するために、Tivoli Performance Viewer などのさまざまなツールによって使用されます。

偽のアラーム

作業が実際に完了すると、 2 番目のメッセージ・セットである、 通知と PMI のイベントが生成されて偽のアラームが識別されます。 次のメッセージがログに書き込まれます。
WSVR0606W: スレッド threadname は以前に報告されています。 
hung but has completed. これは、約 ハング時間にわたってアクティブでした。 
サーバー内に合計 totalthreads 個のスレッドが残っています。 
may be hung.
ここで、 threadname は JVM スレッド・ダンプ内に表示される名前であり、 hangtime はスレッドがアクティブになってからの概算経過時間を示し、 totalthreads はシステム・スレッドの全体的な評価を示します。

ハング時間しきい値の自動調整

スレッド・モニターは、 発行される偽のアラームが多すぎる (ハング・メッセージとクリア・メッセージのペアの数によって判別される) と判断すると、 自動的にしきい値を調整することができます。 この調整が行われると、次のメッセージがログに書き込まれます。
WSVR0607W: Too many thread hangs have been falsely reported.  The hang 
しきい値は現在 thresholdtimeに設定されています。
ここで、 thresholdtime は、 スレッドがハングしていると見なされるまでアクティブでいられる時間 (秒単位) です。

WebSphere Application Server がハング時間しきい値を自動的に調整しないようにすることができます。 ハング検出ポリシーの構成 を参照してください。

システム・アラーム

アプリケーション・サーバーは、システム・アラームを実行するスレッドのアクティビティーをモニターしています。 アラーム・スレッド・モニターのしきい値で定義された時間よりも長い間、システム・アラーム・スレッドがアクティブである場合、アプリケーション・サーバーは次の警告をシステム・ログに記録します。 このメッセージは、応答していないスレッドの名前、スレッドが既にアクティブになっている時間の長さ、およびスレッドの例外スタックを示しており、これによりシステム・コンポーネントが識別されます。

UTLS0008W: アラーム・スレッド threadnamen に対してアクティブです。 
   ミリ秒。ハングする可能性があります。 totalthreadsスレッド・スタック   

このメッセージにおいて、threadname は JVM スレッド・ダンプに表示される名前、n はスレッドがアクティブであった時間の概算の長さ、totalthreads はシステム・スレッドの全体的な評価、threadstack はスレッドの例外スタックを示しています。

アラーム処理が最終的に完了すると、次のメッセージがシステム・ログに書き込まれます。 このメッセージは、偽のアラームを生成したスレッドを示しています。

UTLS0009W: アラーム・スレッド threadname は以前にハングしたと報告されましたが、 
   完了しました。  約 n ミリ秒間、アクティブになっていました。

このメッセージにおいて、threadname は JVM スレッド・ダンプに表示される名前、n はスレッドがアクティブであった時間の概算の長さを示しています。

通常、システム・アラームは、大きな負荷は処理しません。なぜなら、そのようなアクティビティーは、以降のシステム・アラームの処理速度を低下させ、サーバーの動作に影響を与える可能性があるためです。 UTLS0008W メッセージの目的は、システム・アラーム動作によって引き起こされる可能性のある問題を IBM サポート担当員が調査できるようにすることです。

すべてのシステム・アラームは、共通のアラーム・スレッド・プールを共有しています。 このスレッド・プールのモニターを管理するプロパティーは、管理コンソールを使用して調整できます。 アラーム・スレッド・モニターの検査間隔またはしきい値を調整することで、WebSphere がアラーム・ハング・スレッド・メッセージを生成する頻度を下げることができます。 これらの設定を変更する方法については、トピック『ハング検出ポリシーの構成』を参照してください。