5.6.2 レスポンス送受信時の通信タイムアウト
ここでは,Webサーバ連携機能を使用する場合のレスポンス送受信時の通信タイムアウト設定について説明します。レスポンス送受信時の,通信タイムアウトの設定場所を次の図に示します。
Webサーバ連携機能を使用する場合,図中の○印の場所に通信タイムアウトを設定します。通信タイムアウトを設定する場所について説明します。なお,図中の項番は次の説明の項番と対応しています。
-
Webコンテナでのレスポンス送信時(Webコンテナ−リダイレクタ)
Webコンテナからリダイレクタにレスポンスを送信するときに,通信タイムアウトを設定します。通信タイムアウトは,Webコンテナで設定します。
Webコンテナでのレスポンス送信時に通信にタイムアウトを設定することによって検知できる障害については,「5.6.2(1) Webコンテナでのレスポンス送信時」を参照してください。
-
リダイレクタでのレスポンス受信時(Webコンテナ−リダイレクタ)
Webコンテナからのレスポンスを,リダイレクタで受信するときに,通信タイムアウトを設定します。通信タイムアウトは,リダイレクタで設定します。
リダイレクタでのレスポンス受信時に通信タイムアウトを設定することによって検知できる障害については,「5.6.2(2) リダイレクタでのレスポンス受信時」を参照してください。
-
Webサーバでのレスポンス送信時(Webサーバ−クライアント)
Webサーバからクライアントにレスポンスを送信するときに,通信タイムアウトを設定します。通信タイムアウトは,Webサーバで設定します。
Webサーバでのレスポンス送信時に通信にタイムアウトを設定することによって検知できる障害については,「5.6.2(3) Webサーバでのレスポンス送信時」を参照してください。
(1) Webコンテナでのレスポンス送信時
Webコンテナでは,リダイレクタへのレスポンス送信処理に対して,タイムアウト時間を設定できます。設定した通信タイムアウトによって,リダイレクタ側で障害が発生したことを検知できます。検知できる障害を次に示します。
- 検知できる障害
-
-
リダイレクタが稼働するホストがダウンした
-
Webコンテナ−リダイレクタ間でネットワーク障害が発生した
-
また,通信タイムアウトが発生すると,KDJE39507-E(レスポンス送信処理でタイムアウト発生)がメッセージログに出力されます。通信タイムアウトが発生する条件と発生後の動作について次の表に示します。
通信タイムアウトが発生するタイミング |
通信タイムアウト発生後のメソッドの動作 |
通信タイムアウト発生後のサーブレットまたはJSPの動作 |
---|---|---|
サーブレット内で,javax.servlet.ServletResponseクラスのgetOutputStreamメソッドによって得られたjavax.servlet.ServletOutputStreamクラスのメソッドを使用してレスポンスデータをクライアントに送信したとき |
java.net.SocketTimeoutExceptionの例外が発生する。 |
リダイレクタとのコネクションがクローズされるため,リクエストデータおよびレスポンスデータの送受信ができなくなる。 |
サーブレット内で,javax.servlet.ServletResponseクラスのgetWriterメソッドによって得られたjava.io.PrintWriterクラスのメソッドを使用して,レスポンスデータをクライアントに送信したとき |
送信処理が中断されて,リターンする。 |
|
JSP内で,javax.servlet.jsp.JspWriterクラスのメソッドを使用してレスポンスデータをクライアントに送信したとき |
java.net.SocketTimeoutExceptionの例外が発生する。 |
リダイレクタとのコネクションがクローズされるため,リクエストデータおよびレスポンスデータの送受信ができなくなる。 |
静的コンテンツのレスポンスデータをクライアントに送信したとき |
− |
− |
(2) リダイレクタでのレスポンス受信時
リダイレクタは,Webコンテナにリクエストを送信すると,Webコンテナからのレスポンスを待ちます。このレスポンスの待ち時間に,タイムアウトを設定できます。設定した通信タイムアウトによって,Webコンテナ側で障害が発生したことを検知できます。検知できる障害を次に示します。
- 検知できる障害
-
-
Webコンテナが稼働するホストがダウンした
-
Webコンテナ−リダイレクタ間でネットワーク障害が発生した
-
Webコンテナ内のWebアプリケーションで障害が発生した
Webアプリケーションで発生する障害には次のようなものがあります。
- Webアプリケーションで発生する障害
-
-
サーブレット/JSP処理内の無限ループによって,レスポンスが返されない
-
サーブレット/JSPの延長でEnterprise Bean,データベースなどが呼び出され,それによる応答待ちをしている
-
Webアプリケーションでデッドロックが発生している
-
アクセスピーク時にサーバの処理が追いつかないで滞っている
-
-
- リダイレクタでの通信タイムアウト後の動作
-
通信タイムアウトが発生すると,リダイレクタは,Webコンテナとのコネクションを切断し,クライアントにステータスコード500のエラーを返します。
- ポイント
-
アプリケーション処理中にタイムアウトが発生したときの動作
Webコンテナでの処理中にリダイレクタがタイムアウトしていても,Webコンテナでは,リダイレクタがタイムアウトしていることを検知できません。
リダイレクタでのタイムアウトを検知できるのは,Webコンテナの処理が完了し,リダイレクタへレスポンスを転送するときとなります。しかし,この時点では,すでにリダイレクタがWebコンテナとのコネクションを切断しているため,レスポンス送信はエラーとなります。アプリケーション処理中にタイムアウトが発生したときの動作について次の図に示します。
図5‒20 アプリケーション処理中にタイムアウトが発生したときの動作 図について説明します。
-
リダイレクタでタイムアウトが発生すると,Webコンテナとのコネクションを切断する要求を出します。
-
リダイレクタはWebサーバに対して,エラーコードを送信します。
-
Webコンテナでのアプリケーションの処理が完了すると,リダイレクタに対して,レスポンスを送信しますが,1.で,すでにリダイレクタとWebコンテナのコネクションは切断されているため,通信エラーが発生します。
-