Webコンテナの処理の流れ
Webコンテナは以下の流れでクライアントからリクエストを受け付けて処理します。
Webサーバがクライアントからリクエストを受け付け、Webサーバコネクタ経由でWebコンテナへ送信する。
WebコンテナがWebサーバコネクタからリクエストを受け付ける。
受け付けたリクエストを一時的にHTTP接続キューに格納する。
要求処理スレッドは一定間隔でHTTP接続キュー内を監視する。
HTTP接続キューにリクエストがあった場合、要求処理スレッドはリクエストを処理する。
上記はWebコンテナのチューニングポイントとして以下の2つに分類できます。
Webコンテナの処理の流れの5.は同時処理数に関係しています。
5.は「初期スレッド数」、「スレッド数」、「スレッドの増分」で設定することが可能です。
Webコンテナの処理の流れの1.、2.、3.は接続数に関係しています。
1.は「WebサーバコネクタのWebコンテナへの最大接続数」で設定することが可能です。
2.は「最大保留カウント」で設定することが可能です。
3.は「キューサイズ」で設定することが可能です。
以下に、リクエストの流れを基に各設定項目の関係を示します。
同時処理数
同時処理数およびサーバーインスタンスを追加すると、Webアプリケーションの同時実行多重度を増やせます。
同時処理数を増やすと、1プロセスあたりの実行多重度を増やせますが、同時処理数が増えることによる負荷や資源の増加により効果はみられない可能性があります。通常はデフォルト値以下で運用することを推奨しています。
アプリケーションから呼び出すEJBの「5.8.3 Enterprise Beanインスタンスのプーリング」と「5.8.2 Enterprise Beanインスタンスのキャッシング」、JDBCのコネクション数にあわせてチューニングしてください。
同時処理数については、以下が設定できます。
初期スレッド数
スレッド数
スレッドの増分
同時処理数は、Interstage Java EE管理コンソールの[設定] > [クラスタ名-config] または [server-config] > [HTTP サービス] > [要求処理]タブ、およびasadminコマンドを使用して変更できます。詳細については、以下のマニュアルを参照してください。
Interstage Java EE管理コンソールヘルプ
「リファレンスマニュアル(コマンド編)」-「定義項目参照/更新」
「リファレンスマニュアル(コマンド編)」-「configs.config.http-serviceの定義項目」の
request-processing.thread-count(スレッド数)
request-processing.initial-thread-count(初期スレッド数)
request-processing.thread-increment(スレッドの増分)
接続数
接続数は、運用するシステムの要求の違いによって以下のように設定します。
Webコンテナの負荷が高く処理できないリクエストは、時間がかかってもかまわないので、正常に処理させたい場合
項目 | 設定値 |
---|---|
WebサーバコネクタのWebコンテナへの最大接続数 | なし(無制限) |
Webコンテナの最大保留カウント | リクエストを受け付けることができるだけの十分に大きな値を設定 |
Webコンテナのキューサイズ | 処理待ちのリクエストを保持することができるだけの十分に大きな値を設定 |
Webコンテナの負荷が高く処理できないリクエストは、長時間待たせるのではなく、エラーとしてクライアントに通知したい場合
項目 | 設定値 |
---|---|
WebサーバコネクタのWebコンテナへの最大接続数 | Webコンテナが処理可能な数を設定 |
Webコンテナの最大保留カウント | リクエストを受け付けることができるだけの十分に大きな値を設定 |
Webコンテナのキューサイズ | Webコンテナの最大接続数と同じ値を設定 |
接続数に関する設定項目について、以下に説明します。
WebサーバとWebコンテナを同一マシン内で運用する場合
Interstage Java EE管理コンソールの[クラスタ] または[スタンドアロンインスタンス] > [クラスタ名] または[サーバーインスタンス名] > [Webサーバコネクタ]タブ、およびasadminコマンドを使用して変更できます。詳細については、以下のマニュアルを参照してください。
Interstage Java EE管理コンソールヘルプ
「リファレンスマニュアル(コマンド編)」-「update-web-server-connector-configサブコマンド」の--maxprocessorsオプション
WebサーバとWebコンテナをそれぞれ別のマシンで運用する場合
Webサーバを運用するマシン側で設定します。
Interstage管理コンソールからWebサーバコネクタの最大接続数で設定します。また、isj2eeadminコマンドでも設定できます。詳細については、以下のマニュアルを参照してください。
Interstage管理コンソールのヘルプ
「リファレンスマニュアル(コマンド編)」の「isj2eeadmin」
注意
Servletセションをご利用でない環境における、Webサーバコネクタの振り分け処理に関する注意事項)
「Servletコンテナへの最大接続数」を設定している場合、Servletコンテナで処理中のリクエスト数が最大接続数以内であっても、WebサーバコネクタによりHTTP 503エラーが返却されることがあります。(注1)
そのため、リクエスト多重度(クライアント数)が限定されている環境において厳密な運用条件が要求される場合、想定多重度に基づいた最大接続数設定を行う際には、1~3%程度のマージンを取った値とすることをお薦めします。
実際のマージンはHTTP 503エラーの発生状況により、さらに増やすなどしてください。
注1)高負荷状態など、何らかの理由によりWebサーバの特定通信プロセスに長時間(数十ms以上)CPUが割り当たらないなど、特殊な状況によります。
このような状況においては、Webサーバコネクタの内部制御情報の更新が完了する前に次のリクエストが到着する可能性があるためです。
本項目の値を増やすと、Webコンテナが同時に受け付けることができるリクエスト数を増やせます。運用中に高負荷な状態となった場合に想定される、クライアントからの同時リクエスト数を指定しておくことを推奨します。
最大保留カウントは、Interstage Java EE管理コンソールの[設定] > [クラスタ名-config] または [server-config] > [HTTPサービス] > [接続プール]タブ、およびasadminコマンドを使用して変更できます。詳細については、以下のマニュアルを参照してください。
Interstage Java EE管理コンソールヘルプ
「リファレンスマニュアル(コマンド編)」-「定義項目参照/更新」
「リファレンスマニュアル(コマンド編)」-「configs.config.http-serviceの定義項目」の
connection-pool.max-pending-count
注意
最大保留カウントに設定された値はWebコンテナが使用するSocketのbacklogに設定されます。Socketのbacklogに設定した値はOSによって有効となる範囲が決まっていますので、最大保留カウントに設定した値がすべて有効となるわけではありません。
Socketのbacklogの有効範囲については各OSのドキュメントを参照してください。
なお、Windows (R)の場合、200より大きな値を設定しても有効になりません。
本項目の値を増やすと、Webコンテナが受け付けたクライアントからのリクエストを、Webコンテナが処理できるようになるまでの間保持する数を増やせます。
運用時に一時的に負荷が高くなり、Webコンテナの同時処理数を超えるリクエストを受け付けることが想定される場合は、Webコンテナの同時処理数を抑えて、Webコンテナのキューサイズに大きな値を設定することで、サーバ全体のレスポンスの悪化を防ぐことができます。
設定ポイント1:
運用時に一時的に負荷が高くなり、クライアントからのリクエスト処理に失敗しかつ、サーバーログにWEB1505が出力されている場合は、キューサイズを大きくしてください。
設定ポイント2:
キューサイズを増やしてリクエストを処理することができるだけの十分に大きなキューを用意した場合、クライアントからのリクエストに対するレスポンスに遅れが生じる可能性があります。Webサーバコネクタの送受信タイムアウト値を増やしてください。
キューサイズは、Interstage Java EE管理コンソールの[設定] > [クラスタ名-config] または [server-config] > [HTTPサービス] > [接続プール]タブ、およびasadminコマンドを使用して変更できます。詳細については、以下のマニュアルを参照してください。
Interstage Java EE管理コンソールヘルプ
「リファレンスマニュアル(コマンド編)」-「定義項目参照/更新」
「リファレンスマニュアル(コマンド編)」-「configs.config.http-serviceの定義項目」の
connection-pool.queue-size-in-bytes
WebサーバとWebコンテナを同一マシン内で運用する場合
Interstage Java EE管理コンソールの[クラスタ] または[スタンドアロンインスタンス] > [クラスタ名] または[サーバーインスタンス名] > [Webサーバコネクタ]タブ、およびasadminコマンドを使用して変更できます。詳細については、以下のマニュアルを参照してください。
Interstage Java EE管理コンソールヘルプ
「リファレンスマニュアル(コマンド編)」-「update-web-server-connector-configサブコマンド」の--sendreceivetimeoutオプション
WebサーバとWebコンテナをそれぞれ別のマシンで運用する場合
Webサーバを運用するマシン側で設定します。
Interstage管理コンソールからWebサーバコネクタの送受信タイムアウトで設定します。また、isj2eeadminコマンドでも設定できます。詳細については、以下のマニュアルを参照してください。
Interstage管理コンソールのヘルプ
「リファレンスマニュアル(コマンド編)」の「isj2eeadmin」
ポイント
Webサーバコネクタの送受信タイムアウトが発生してもイベントログ/システムログへの出力を行いたくない場合、以下のファイルを作成することにより、メッセージIJServer12035、IJServer12044、およびIJServer12050のイベントログ/システムログへの出力を抑止することができます。イベントログ/システムログへの出力を抑止した場合、これらのメッセージはWebサーバコネクタのログにのみ出力されます。ファイルの属性に制約はありません。また、ファイルの内容は空白としてください。
/opt/FJSVjs5/conf/jk2/wscmsgcntl.conf
キープアライブ
キープアライブに関する設定項目について、以下に説明します。
本項目では、HTTPのキープアライブの有効/無効および、1回のコネクションで処理可能なリクエスト数を設定します。
"無効"を指定した場合は、1つのリクエストが完了するたびに接続を閉じて、次のリクエストに対して新しく接続を行います。
"有効"を指定した場合は、Webコンテナがレスポンスを返した後、次のリクエストが来るまでの間、HTTP接続を確立し、リクエストの転送効率を向上させることができます。
初期値は、"無効"です。
IPCOMなどの負荷分散装置と連携する場合は、負荷分散装置のキープアライブ機能の設定と合わせる必要があります。詳細については、負荷分散装置のマニュアルを参照してください。
キープアライブの有効/無効および、1回のコネクションで処理可能なリクエスト数は、Interstage Java EE管理コンソールの[設定] > [クラスタ名-config]または[server-config] > [HTTPサービス]の[追加プロパティ]およびasadminコマンドを使用して、"maxKeepAliveRequests"プロパティで変更することができます。詳細については、以下のマニュアルを参照してください。
Interstage Java EE管理コンソールヘルプ
「リファレンスマニュアル(コマンド編)」-「定義項目参照/更新」
「リファレンスマニュアル(コマンド編)」-「configs.config.http-serviceの定義項目」の「property.maxKeepAliveRequests(1回のコネクションで処理可能なリクエスト数)」
本項目の値は、Webコンテナがレスポンスを返した後、次のリクエストが来るまでの間、キープアライブ接続を維持する時間を表します。クライアントのキープアライブのタイムアウト仕様に合わせて、タイムアウトを設定してください。
例えば、クライアントがサーバにつながっていることが前提でリクエストを投げてくる場合は、クライアント側のタイムアウトより大きい値を設定してください。
ただし、この項目には10秒以下の値を設定できません。
また、本項目の値は、以下のタイムアウト値にも同時に適用されます。
HTTP接続キュー:Webコンテナのキュー(HTTP接続キュー)に格納後、リクエストがスレッドで処理を開始されるまで接続を維持する時間
キープアライブのタイムアウトは、asadminコマンドを使用して変更できます。詳細については、以下のマニュアルを参照してください。
「リファレンスマニュアル(コマンド編)」-「定義項目参照/更新」
「リファレンスマニュアル(コマンド編)」-「configs.config.http-serviceの定義項目」の「keep-alive.timeout-in-seconds(キープアライブのタイムアウト)」
注意
キープアライブが"無効"な場合、リクエスト毎に接続が切断されるため、クライアント側(Webサーバ/Webサーバコネクタを使用する運用の場合、Webサーバを運用するマシンを含む)にて、TCP/IP資源(エフェメラルポート)をより多く消費します。
短時間に多くのリクエストが行われる場合に、TCP/IP資源が枯渇する場合があります。
必要に応じて、キープアライブを"有効"にするか、または「3.4 TCP/IPパラメタのチューニング」を参照し、TCP/IPパラメタをチューニングしてください。