16.3.5 リクエスト処理の停滞監視
リクエスト処理の停滞監視は,サーブレットコンテナとして使用するTomcatのHTTPリクエスト処理のスローダウン・ハングアップを監視します。
リクエスト処理の停滞を検知するには,org.apache.catalina.valves.StuckThreadDetectionValveを設定します。org.apache.catalina.valves.StuckThreadDetectionValveは,リクエスト処理スレッドの停滞を検出するTomcat標準のバルブ実装です。このマニュアルでは,org.apache.catalina.valves.StuckThreadDetectionValveを「停滞検出バルブ」と呼びます。
リクエスト処理の停滞を検知する方法について説明します。
- 〈この項の構成〉
(1) 障害発生の判定基準
停滞検出バルブからのリクエスト処理停滞通知を受信した場合,障害発生と判定します。
リクエスト処理の停滞監視の状態とその説明を次の表に示します。
|
状態 |
説明 |
|---|---|
|
初期状態 |
モニタ対象プロセスからの開始完了通知受信時にリクエスト処理の停滞監視を開始します。 |
|
正常状態 |
モニタ対象プロセスから停滞検出バルブの情報を受け取り,停滞しているスレッドや停滞検出バルブによってインタラプトされたスレッドがない場合は正常と判定します。正常と判定している間は,イベントは発行しません。 |
|
異常状態 |
モニタ対象プロセスから停滞検出バルブの情報を受け取り,停滞しているスレッドや停滞検出バルブによってインタラプトされたスレッドの情報がある場合,障害発生と判定し,メッセージ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)(e) 障害イベント・回復イベントの通知後の動作」を参照してください。
(3) 設定できる内容
リクエスト処理の停滞監視に関して設定できる内容を次に示します。
(a) 停滞検出バルブの定義(実行可能JAR/WAR形式)
実行可能JAR/WAR形式の場合,モニタ対象プロセスの組み込みサーブレットコンテナとして使用するTomcatの「停滞検出バルブ」を有効にするかどうかをconfig.properties(本製品の設定ファイル)で設定できます。デフォルトは無効(false)です。
リクエスト処理の停滞の通知は,TomcatのEngineコンポーネントのバックグラウンドスレッド実行(Tomcatのデフォルト:10秒間隔)によって実行されます。リクエスト処理停滞と見なすしきい値(単位:秒)は,config.properties(本製品の設定ファイル)で設定できます。デフォルトは600秒です。
該当するプロパティと設定例を次に示します。
healthcheck.stuckthread.valve.enabled=true healthcheck.stuckthread.valve.threshold=600
モニタ対象プロセスに,独自に「停滞検出バルブ」を定義している場合は,healthcheck.stuckthread.valve.enabledに無効(false)を指定してください。
config.properties(本製品の設定ファイル)については,「18.2 config.properties(本製品の設定ファイル)」を参照してください。
(b) リクエスト処理停滞通知の監視設定(実行可能JAR/WAR形式)
実行可能JAR/WAR形式の場合,config.properties(本製品の設定ファイル)で「停滞検出バルブ」からのリクエスト処理停滞通知を監視するかどうかを設定できます。該当するプロパティと設定例を次に示します。デフォルトは無効(false)です。
healthcheck.stuckthread.enabled=true
モニタ対象プロセスに,独自に「停滞検出バルブ」を定義している場合,プロセスモニタの「停滞検出バルブ」からのリクエスト処理の停滞通知を監視するときは,healthcheck.stuckthread.valve.enabledに無効(false),healthcheck.stuckthread.enabledに有効(true)を指定してください。
config.properties(本製品の設定ファイル)については,「18.2 config.properties(本製品の設定ファイル)」を参照してください。
(c) 停滞検出バルブの定義(WARデプロイ形式)
WARデプロイ形式で,リクエスト処理の停滞状況を監視する場合,停滞検出バルブに関しては次の表の項目を設定します。
|
項目 |
説明 |
|---|---|
|
設定対象のファイル |
server.xml(Tomcatのサーバ設定ファイル)※1 または context.xml(Tomcatのコンテキスト設定ファイル)※1 |
|
設定する要素 |
org.apache.catalina.valves.StuckThreadDetectionValve※2 |
- 注※1
-
server.xml(Tomcatのサーバ設定ファイル)およびcontext.xml(Tomcatのコンテキスト設定ファイル)の記述方法については,Tomcatのドキュメントを参照してください。
server.xml(Tomcatのサーバ設定ファイル)に本製品独自に追加が必要な要素については,「18.5 server.xml(Tomcatのサーバ設定ファイル)」を参照してください。
context.xml(Tomcatのコンテキスト設定ファイル)に本製品独自に追加が必要な要素については,「18.6 context.xml(Tomcatのコンテキスト設定ファイル)」を参照してください。
- 注※2
-
Engine,HostまたはContextコンポーネントに設定します。
設定する要素について次に説明します。
-
org.apache.catalina.valves.StuckThreadDetectionValve
リクエスト処理の停滞を検知します。
停滞検出バルブを定義したコンポーネントのバックグラウンドスレッド実行(Tomcatのデフォルト:10秒間隔)によって,リクエスト処理の停滞の通知が実施されます。
リクエスト処理停滞と見なすしきい値(単位:秒)はValve要素に設定できます。Tomcatのデフォルトは600秒です。
停滞検出バルブの設定例を次に示します。
<Context> ... <Valve className="org.apache.catalina.valves.StuckThreadDetectionValve" .../> ... </Context>
(d) リクエスト処理停滞通知の監視設定(WARデプロイ形式)
WARデプロイ形式の場合,プロセスモニタのconfig.properties(本製品の設定ファイル)で,停滞検出バルブからのリクエスト処理停滞通知を監視するかどうかを設定できます。
該当するプロパティと設定例を次に示します。デフォルトは無効(false)です。
healthcheck.stuckthread.enabled=false
config.properties(本製品の設定ファイル)については,「18.2 config.properties(本製品の設定ファイル)」を参照してください。
(e) 障害イベント・回復イベントの通知後の動作
障害イベント・回復イベントの通知後の動作は,次の項目を組み合わせてconfig.properties(本製品の設定ファイル)で指定できます。
-
ユーザコマンドの実行
ユーザコマンドを定義する場合は,別途「16.4 稼働監視機能の設定(ユーザコマンドの実行)」の定義が必要です。
-
スナップショットログの収集
-
モニタ対象プロセスの停止
該当するプロパティと設定例を次に示します。この例では,「16.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(本製品の設定ファイル)については,「18.2 config.properties(本製品の設定ファイル)」を参照してください。