内容/目次
|
更新ログ |
(2009/11/09 11:48) 設定例におけるタイムアウトの総計時間を訂正
(2009/11/13 14:21) トランザクション・タイムアウトより長く設定するとの記述を削除
【概要】
WAS (WebSphere Application Server) ノードにおいて適切なOSのKeepAliveパラメーターのチューニングが行われていない場合、データベース障害時(ページング発生によるデータベース無応答状況、ノード障害時、ネットワーク障害時など)に、WASのスレッドが長時間実行状態(応答待ち状態)で残存し、パフォーマンスの悪化やWASのサービス提供不能状態に繋がる可能性があります。
【対象】
WAS V5.0/V5.1/V6.0/V6.1/V7.0
【詳細】
アプリケーション・サーバーからデータベースへの処理を実行し、応答を待機している状況において、以下のような障害状況が発生した場合、アプリケーション・サーバーからは実際に長い処理が実行されているのか、問題が発生しているのか判断できないため、データベース側からの応答を待ち続けます。
- - データベース・サーバーがページング発生などによる無応答状態に陥った場合
- またはノード障害・ネットワーク障害など、接続の切断が発生せずに、データベース・サーバーがダウンまたは応答不能となった場合
たとえデータベースがHACMP (High Availability Concurrent Multiprocessing) などクラスタリング製品によりテークオーバーされた場合であっても、この応答を待機しているスレッドはWASからは解放されません[注1][注2]
このスレッドを解放するためには、WASノードのOSのネットワーク・パラメータのチューニングにより、非活動状態にある接続を強制的に切断し、アプリケーション・サーバーに処理を戻すことが必要です。
特にデフォルトのOSのKeepAliveパラメータは 2時間以上 という大きな設定値となっているため[注3]、適切なチューニングを実施していない場合以下のような状態に陥ります。
- スレッド・プール[注4]内に応答を待機しているスレッドが多数存在する場合、新規処理を実行できるスレッドが減少し、パフォーマンスの悪化につながります。
- 応答を待機しているスレッドが最大スレッド数までスレッド・プールを消費している場合には、新規の要求をまったく受付けられず、サービス提供ができなくなります。
- デフォルトのKeepAliveパラメータの設定値の場合、2時間以上接続が切断されないため、システム復旧にも遅れが生じます。
[注1] 長時間実行状況にあるスレッドに対しては、SystemOut.logに以下のようなメッセージが出力されます。
> [06/08/08 10:03:26:361 JST] 00000014 ThreadMonitor W WSVR0605W: スレッド "WebContainer : 5" (000000fc) が 634675 ミリ秒間アクティブで、
> ハング している可能性があります。 サーバー内には、ハングの可能性のあるスレッドが合計 1 本あります。
長時間実行スレッドの検出ポリシーの調整については、Information Center 「ハング検出ポリシーの構成」をご参照ください。
[注2] データベース無応答状況障害 発生時の アプリケーション側の状況とタイムアウト発生のタイミングは、下表の通りです。
| アプリケーション側の状況 | タイムアウト発生のタイミング | 例)AIXデフォルト値 でのタイムアウト時間 | |
| 1 | 新規TCP/IP接続が張る直前、またはセッション確立中の場合 | TCP KeepInitの設定によりTimeoutが発生 | 75秒 |
| 2 | TCP/IP接続が確立された状態で、新規要求を送付中の場合 (ネットワークレベルでパケットを送付中の状態) | TCP/IPのRTO(再送タイムアウト)の設定によりTimeoutが発生 | 約13分 |
| 3 | TCP/IP接続が確立された状態で、要求パケットを送り切り、応答を待っている場合 (応答が返る前にネットワークレベルで反応がない状態) | TCP KeepAliveタイムアウトの設定によりTimeoutが発生 | 2時間+10分 |
| 4 | TCP/IP接続が確立された状態で、接続プールの中でアイドル状態の場合 (接続プール内でフリープール状況の接続) | TCP KeepAliveタイムアウトの設定によりTimeoutが発生 | 2時間+10分 |
[注3] 各OSのデフォルト値は以下の回避策の節、および各製品マニュアルでご確認ください。
[注4] 使用されるスレッド・プールはアプリケーションの種類により異なります。
【回避策】
WASノードのOSのKeep Aliveパラメーターのチューニングを実施します。
OSのデフォルト値のままの設定としている場合、検査パケット(Prove Packet)は、2時間活動のない接続に対して送付されます。
その後、指定間隔で検査パケットを送付し、指定された回数、ACK応答がない接続を切断します。
検査パケットにACK応答があれば、検査パケットの送付は停止し、接続はそのまま保持されます。
例) AIXのデフォルト値を使用した場合、2時間活動がない活動に対して、75秒間隔で8回のパケットを送付します。
従って検査パケットに対してACK応答がない場合、当該接続での最後の活動から2時間+10分+75秒で切断されます。
[参考] 各OSのKeep Aliveパラメータおよびそのデフォルト値 [ ]内は単位
OS | 検査パケット送付までの待機時間 | 検査パケット送付の間隔 | 検査パケット送付の再送回数 |
AIX | tcp_keepidle 14400[0.5秒] (2時間) | tcp_keepintvl 150[0.5秒] (75秒) | tcp_keepcnt 8[回] |
Linux | tcp_keepalive_time 7200[秒] (2時間) | tcp_keepalive_intvl 75[秒] | tcp_keepalive_probes 9[回] |
Windows | KeepAliveTime 7200[秒] (2時間) | KeepAliveInterval 1[秒] | TcpMaxDataRetransmission 5[回] |
適切な値はシステムに依存しますが、以下の点を考慮してください。
・不必要な切断を防ぐため、ネットワーク機器のテイクオーバー時間より長く設定する
・テイクオーバー完了時に新規処理を受付けられるよう、データベースのテイクオーバー時間より短く設定する
・OS全体に効くパラメータであり、TCP/IPを利用するアプリケーションは全て影響を受ける可能性がありますのでご注意ください[注5][注6]
AIXにおける設定例は、以下の通りです。この設定の場合、5分+45秒で非活動の接続が切断されます。
tcp_keepidle=600 [0.5秒]
tcp_keepintvl=10 [0.5秒]
tcp_keepcnt=8 [回]
[注5] 携帯ユーザーなど不安定な接続環境にあるクライアントからの接続を受ける場合、Keep Alive設定を極端に短くした場合、接続が切断されてしまう可能性があります。
[注6] KeepAliveの検査パケットが送付されるか否かは、当該ソケットに対して SO_KEEPALIVEソケット・オプションが指定されているかに依存します。
【参考】
TCP/IP keepalive settings and related DB2 registry variables
WebSphere V7.0 Infocenter AIXシステムの調整 (他バージョンを使用している場合は、各バージョンのInfocenterをご確認ください)
WebSphere Infocenter Linux システムの調整 (他バージョンを使用している場合は、各バージョンのInfocenterをご確認ください)
WebSphere Infocenter Windows システムの調整 (他バージョンを使用している場合は、各バージョンのInfocenterをご確認ください)
IBM System p TCP/IP keepidle 間隔設定に関する考慮点
以上
文書情報
有効期限: 2017年10月23日
資料番号: WAS-09-048
掲載内容について
当サイトは、お客様の問題解決のためのヒントとしてご利用ください。 当サイトにおける記載内容は、お客様固有の問題に対し、適切であるかどうか、また、正確であるかどうかは十分検証されていません。 結果について、いかなる保証も責任も負いかねますので、あらかじめご了承ください。
商標について
IBM、IBM(logo)、developerWorks、Lotus、PartnerWorld、Rational、Tivoli、 WebSphereはIBM Corporationの商標です。 他の会社名、製品名およびサービス名等はそれぞれ各社の商標です。
