Webアプリケーション単位の最大同時実行スレッド数は,値を設定している場合は,その数が適用されます。ここでは,同時実行スレッド数を設定していないWebアプリケーションの最大同時実行スレッド数,および占有スレッド数を設定していないWebアプリケーションでの最大同時実行スレッド数の考え方について説明します。
(a) 同時実行スレッド数制御を設定していないWebアプリケーションの場合
最大同時実行スレッド数を設定していないWebアプリケーションの,最大同時実行スレッド数は次のとおりです。
- 最大同時実行スレッド数=
- Webコンテナの最大同時実行スレッド数−Webアプリケーション単位の占有スレッド数の合計※
- 注※
- WebコンテナにデプロイされているすべてのWebアプリケーションに設定されている,占有スレッド数の合計となります。
(b) 占有スレッド数を設定していないWebアプリケーションの場合
Webアプリケーション単位の同時実行スレッド数制御の設定では,占有スレッド数の設定は任意となります。占有スレッド数を設定していないWebアプリケーションの最大同時実行スレッド数は,次のどちらかの値のうち,小さい方の値が適用されます。
- 最大同時実行スレッド数=
- Webアプリケーションに設定した最大同時実行スレッド数
- または
- Webコンテナの最大同時実行スレッド数−Webアプリケーション単位の占有スレッド数の合計※
- 注※
- WebコンテナにデプロイされているすべてのWebアプリケーション設定されている,占有スレッド数の合計となります。
Webコンテナ単位での同時実行スレッド数だけを設定している場合,Webコンテナ内のほかのWebアプリケーションへのアクセスが集中すると,スレッドはアクセスが集中しているアプリケーションに使用されます。占有スレッド数を設定することで,Webアプリケーション内での実行に必要なスレッド数を最低限確保できるので,Webコンテナ内のほかのWebアプリケーションへのアクセスが集中した場合でも,リクエストが待ち状態になることなく,実行できます。
(a) 占有スレッド数の設定の有無によるWebアプリケーションの動作
Webアプリケーションの占有スレッド数について次の図に示します。この図を使用して,占有スレッド数を設定したWebアプリケーションと占有スレッド数を設定していないWebアプリケーションの動作を説明します。
図4-26 Webアプリケーションの占有スレッド数
図の内容について説明します。Webコンテナでは,Webアプリケーション1とWebアプリケーション2が動作しています。Webアプリケーション2では,Webアプリケーションでの同時実行スレッド数制御を設定していませんが,Webアプリケーション1では,Webアプリケーションでの同時実行スレッド制御を設定しています。Webアプリケーション1の最大同時実行スレッド数は3で,占有スレッド数は1に設定されています。
例えば,Webアプリケーション2にアクセスが集中した場合,Webアプリケーション1に占有スレッド数を設定していないと,すべてのスレッドがWebアプリケーション2に使用されます。図のようにWebアプリケーション1に占有スレッド数を設定することで,Webアプリケーション2へのアクセスが集中したときでも,Webアプリケーション1では1スレッドは最低限確保できます。これによって,占有スレッド数を設定しているWebアプリケーション1の処理を確実に実行できます。
このように,占有スレッド数を設定しておくと,ほかの業務へのアクセスが集中した場合でも確実に実行できます。このため,管理用アプリケーションなどの重要度の高いWebアプリケーションに対して占有スレッド数を設定しておくことをお勧めします。
なお,占有スレッド数に指定した数のスレッドは,ほかのWebアプリケーションのリクエスト処理には使用されません。また,Webアプリケーション単位の同時実行スレッド制御の設定では,占有スレッド数の設定は任意となります。
Webサーバの最大同時接続数(Webサーバ連携機能を使用する場合)またはWebクライアントからの最大同時接続数(インプロセスHTTPサーバを使用する場合)が少ないときに,占有スレッド数を設定していないWebアプリケーションへのリクエストによって最大同時接続数が占有されると,占有スレッド数を設定したWebアプリケーションにアクセスしても,Webサーバ上またはインプロセスHTTPサーバ上で実行待ちになったり,エラーになったりします。
占有スレッド数を設定したWebアプリケーションを,ほかのWebアプリケーションへのアクセス流量に依存しないで確実に実行させるためには,最大同時接続数に適切な値を設定する必要があります。最大同時接続数の設定方法を次に示します。
- Webサーバの最大同時接続数の設定方法(Webサーバ連携機能を使用する場合)
Webサーバ連携機能を使用する場合,Webサーバの最大同時接続数を,次に示す値よりも大きい値にする必要があります。
Webサーバの最大同時接続数>実行待ちキューサイズの総和+Webコンテナ単位の最大同時実行スレッド数
占有スレッド数を設定する場合は,上記の式を満たすように適切な値を設定してください。
なお,Webサーバの最大同時接続数は,次の個所に設定されています。
- Hitachi Web Serverを使用している場合
- httpsd.confのThreadsPerChildディレクティブ(Windowsのとき)またはhttpsd.confのMaxClientsディレクティブ(UNIXのとき)
- Microsoft IISを使用している場合
- [インターネット サービス マネージャ]で設定したクライアントとの接続数
Hitachi Web ServerまたはMicrosoft IISを使用している場合の設定の詳細については,マニュアル「Hitachi Web Server」またはMicrosoft IISのヘルプを参照してください。
- Webクライアントからの最大同時接続数の設定方法(インプロセスHTTPサーバを使用する場合)
インプロセスHTTPサーバを使用する場合,Webクライアントからの最大同時接続数を次に示す値よりも大きい値にする必要があります。
Webクライアントからの最大同時接続数>実行待ちキューサイズの総和+Webコンテナ単位の最大同時実行スレッド数
なお,Webクライアントからの同時接続数とは,Webクライアントからの最大接続数から,接続を拒否するリクエスト数を引いた値です。詳細については,「4.3.3 Webクライアントからの同時接続数の制御」を参照してください。
Webアプリケーションの実行待ちキューサイズを設定します。
Webアプリケーションに最大同時実行スレッド数を設定している場合,実行スレッド数が最大数に達してしまうと,リクエストはキューにためられます。このときの,実行待ちのキューのサイズを,Webアプリケーション単位で指定できます。
実行待ちキューサイズの設定は,Webアプリケーション単位での同時実行スレッド数を設定しているかどうかで異なります。
- Webアプリケーション単位で同時実行スレッド数を設定している場合
Webアプリケーションごとに実行待ちキューサイズを設定できます。
- Webアプリケーション単位で同時実行スレッド数を設定していない場合
Webアプリケーションで共通となる実行待ちキューサイズが使用されます。共通の実行待ちキューサイズのことを,デフォルトの実行待ちキューサイズといいます。
- 実行待ちキューでの動作
- 実行待ちキューの設定が,Webアプリケーションの実行待ちキューサイズとデフォルトの実行待ちキューサイズを含め,複数ある場合,共有スレッド数を使用して実行されるリクエストの順序は,キューのリクエストのうち,先に到着したリクエストから処理されます。
- Webサーバの最大同時接続数と実行待ちキュー(Webサーバ連携機能を使用する場合)
- WebサーバからWebコンテナに転送されるリクエストの多重度は,Webサーバの最大同時接続数が上限となります。このため,占有スレッド数を設定する場合には,実行待ちキューサイズはWebサーバの最大同時接続数より少ない数にしてください。
- Webクライアントからの最大同時接続数と実行待ちキュー(インプロセスHTTPサーバを使用する場合)
- Webクライアントからの接続数の多重度の上限は次に示す値となります。
-
- Webクライアントからの最大同時接続数−接続を拒否するリクエスト数
-
- このため,占有スレッド数を設定する場合には,実行待ちキューサイズはWebクライアントからの最大同時接続数より少ない値にする必要があります。
- なお,Webクライアントからの最大同時接続数が「実行待ちキューサイズの総和+Webコンテナ単位の最大同時実行スレッド数」よりも大きい場合,インプロセスHTTPサーバによるWebクライアントからの同時実行数の制御は不要です。また,Webクライアントからの最大同時接続数が「実行待ちキューサイズの総和+Webコンテナ単位の最大同時実行スレッド数」よりも小さい場合,インプロセスHTTPサーバによるWebクライアントからの同時実行数の制御を実行することによって,クライアントに対して接続待ちを発生させないで即座にエラーを返すことができます。
- ポイント
- 同時実行スレッド数が最大数に達したときのリクエストの動作
- Webアプリケーション単位の同時実行スレッド数が最大数に達した場合で,キューに空きがあるときは,リクエストはキューにたまります。そして,処理中のリクエスト処理が完了したあとに,順次キューからリクエストが取り出され,実行されます。なお,キューに空きがないときは,リクエストはエラーとなり,クライアントには,HTTP 503エラーが返ります。
All Rights Reserved. Copyright (C) 2006, 2007, Hitachi, Ltd.