10.3.5 リクエスト処理の停滞監視
リクエスト処理の停滞監視は,TomcatのHTTPリクエスト処理のスローダウン・ハングアップを監視します。
リクエスト処理の停滞を検知するには,リクエスト処理スレッドの停滞を検出する,次に示すTomcat標準のバルブ実装を定義します。このマニュアルでは停滞検出バルブと表記します。
org.apache.catalina.valves.StuckThreadDetectionValve
リクエスト処理の停滞を検知する方法について説明します。
- 〈この項の構成〉
(1) 障害発生の判定基準
停滞検出バルブからのリクエスト処理停滞通知を受信した場合,障害発生と判定します。
詳細な状態は次のとおりです。
状態 |
説明 |
---|---|
初期状態 |
Tomcatサーバプロセスからの開始完了通知受信時にリクエスト停滞検知の監視を開始します。 |
正常状態 |
Tomcatサーバプロセスから停滞検出バルブの情報を受け取り,停滞しているスレッドや停滞検知バルブによってインタラプトされたスレッドがない場合は正常と判定します。正常と判定している間は,イベントは発行しません。 |
異常状態 |
Tomcatサーバプロセスから停滞検出バルブの情報を受け取り,停滞しているスレッドや停滞検知バルブによりインタラプトされたスレッドの情報がある場合,障害発生と判定し,メッセージKDLR20220-Wを出力して障害イベントを1回発行します。すでに障害が発生しているスレッドとは異なるスレッドの情報がある場合は,その度に新しい障害発生と判定し,メッセージKDLR20220-Wは出力しないで障害イベントを発行します。 その後,停滞検出バルブの情報から,停滞しているスレッドも停滞検知バルブによってインタラプトされたスレッドもなくなった場合は,障害の回復と判定し,メッセージKDLR20221-Iを出力し回復イベントを1回発行して正常状態に戻ります。 |
障害イベント・回復イベントの発行時に出力されるイベントプロパティと,イベント検知後のアクションについては,「(2) 障害検知時の動作」を参照してください。
(2) 障害検知時の動作
(a) 障害検知時に出力されるイベントプロパティ
障害イベント・回復イベントの発行時には,JSON形式のイベントプロパティを出力します。
リクエスト処理の結果に応じて,出力するイベントプロパティは次のように異なります。
-
イベントプロパティ
{ "type": "stuckthread", "timestamp": "yyyy-MM-dd'T'HH:mm:ss.SSSXXX", "succeeded": false, "objectName": "Catalina:context=/examples,host=localhost,name=StuckThreadDetectionValve,type=valve", "count": 2<停滞しているスレッド数>, "ids": [1000,1001]<停滞しているスレッドID>, "interruptedcount": 0<前回報告時から新たにinterruptされたスレッド数> }
-
成功イベントプロパティ
{ "type": "stuckthread", "timestamp": "yyyy-MM-dd'T'HH:mm:ss.SSSXXX", "succeeded": true, "objectName": "Catalina:context=/examples,host=localhost,name=StuckThreadDetectionValve,type=valve" }
(b) 障害検知後のアクション
稼働監視コンポーネントでリクエスト処理の停滞を検知した場合,スナップショットログを収集します。
アクションの変更方法については「(3)(c) 障害イベント・回復イベントの通知後の動作」を参照してください。
(3) 設定できる内容
リクエスト処理の停滞監視に関して設定できる内容を次に示します。
(a) Tomcat標準の停滞検出バルブの定義
リクエスト処理の停滞監視をする場合,停滞検出バルブは次の個所に設定します。
項目 |
説明 |
---|---|
設定対象のファイル |
server.xml(Tomcatのサーバ設定ファイル)※1 または context.xml(Tomcatのコンテキスト設定ファイル)※1 |
設定する要素 |
org.apache.catalina.valves.StuckThreadDetectionValve※2 |
設定する要素について次に説明します。
-
org.apache.catalina.valves.StuckThreadDetectionValve
リクエスト処理の停滞を検知します。
停滞検出バルブを定義したコンポーネントのバックグラウンドスレッド実行(Tomcatのデフォルト:10秒間隔)によって,リクエスト処理の停滞の通知が実施されます。
リクエスト処理停滞と見なす閾値(単位:秒)はValve要素に設定できます。Tomcatのデフォルトは600秒です。
停滞検出バルブの設定例を次に示します。
<Context> ... <Valve className="org.apache.catalina.valves.StuckThreadDetectionValve" .../> ... </Context>
(b) リクエスト処理停滞通知の監視設定
Tomcatプロセスモニタのconfig.properties(本製品の設定ファイル)で,停滞検出バルブからのリクエスト処理停滞通知を監視するかどうかを設定できます。
該当するプロパティと設定例を次に示します。デフォルトは無効(false)です。
healthcheck.stuckthread.enabled=false
config.properties(本製品の設定ファイル)については,「12.2 config.properties(本製品の設定ファイル)」を参照してください。
(c) 障害イベント・回復イベントの通知後の動作
障害イベント・回復イベントの通知後の動作は,次の項目を組み合わせてconfig.properties(本製品の設定ファイル)で指定できます。
-
ユーザコマンドの実行
ユーザコマンドを定義する場合は,別途「10.4 稼働監視機能の設定(ユーザコマンドの実行)」の定義が必要です。
-
スナップショットログの収集
-
Tomcatサーバプロセスの停止
該当するプロパティと設定例を次に示します。この例では,「10.4 稼働監視機能の設定(ユーザコマンドの実行)」で設定する「ユーザコマンド定義のID」として,「exec1」「exec2」を設定しています。
healthcheck.stuckthread.actions.failure.usercommand.idrefs.1=exec1 healthcheck.stuckthread.actions.failure.snapshot=true healthcheck.stuckthread.actions.failure.terminate=false healthcheck.stuckthread.actions.recovery.usercommand.idrefs.1=exec2
config.properties(本製品の設定ファイル)については,「12.2 config.properties(本製品の設定ファイル)」を参照してください。