2.15.2 同時実行スレッド数の制御に必要なパラメタ(Webアプリケーション単位)
Webアプリケーション単位でスレッド数を制御する場合に必要なパラメタについての概要を次に示します。
-
Webコンテナ単位の同時実行スレッド数制御の設定
Webコンテナ単位の最大同時実行スレッド数を設定します。なお,ここで設定した最大同時実行スレッド数は,Webコンテナ上にデプロイされているすべてのWebアプリケーションで共有します。
-
Webアプリケーション単位の同時実行スレッド数制御の設定
同時実行スレッド数を制御したいWebアプリケーションに対して,次に示すパラメタを設定します。
-
最大同時実行スレッド数
Webアプリケーションで最大で幾つのスレッドを同時に実行できるかを設定します。
-
占有スレッド数
Webアプリケーションの占有スレッド数を設定します。
-
Webアプリケーション単位の実行待ちキューサイズ
Webアプリケーションの実行待ちキューサイズを設定します。
-
デフォルトの実行待ちキューサイズ
Webアプリケーション単位の同時実行スレッド数制御を設定していないWebアプリケーションのための,実行待ちキューサイズを設定します。
-
Webアプリケーション単位の同時実行スレッド数制御の設定に必要なパラメタの詳細について説明します。
(1) Webアプリケーションの最大同時実行スレッド数
Webアプリケーション単位の最大同時実行スレッド数は,値を設定している場合は,その数が適用されます。ここでは,同時実行スレッド数を設定していないWebアプリケーションの最大同時実行スレッド数,および占有スレッド数を設定していないWebアプリケーションでの最大同時実行スレッド数の考え方について説明します。
(a) 同時実行スレッド数制御を設定していないWebアプリケーションの場合
最大同時実行スレッド数を設定していないWebアプリケーションの,最大同時実行スレッド数は次のとおりです。
- 最大同時実行スレッド数=
-
Webコンテナの最大同時実行スレッド数−Webアプリケーション単位の占有スレッド数の合計※
- 注※
-
WebコンテナにデプロイされているすべてのWebアプリケーションに設定されている,占有スレッド数の合計となります。
(b) 占有スレッド数を設定していないWebアプリケーションの場合
Webアプリケーション単位の同時実行スレッド数制御の設定では,占有スレッド数の設定は任意となります。占有スレッド数を設定していないWebアプリケーションの最大同時実行スレッド数は,次のどちらかの値のうち,小さい方の値が適用されます。
- 最大同時実行スレッド数=
-
Webアプリケーションに設定した最大同時実行スレッド数
または
Webコンテナの最大同時実行スレッド数−Webアプリケーション単位の占有スレッド数の合計※
- 注※
-
WebコンテナにデプロイされているすべてのWebアプリケーション設定されている,占有スレッド数の合計となります。
(2) Webアプリケーションの占有スレッド数
Webコンテナ単位での同時実行スレッド数だけを設定している場合,Webコンテナ内のほかのWebアプリケーションへのアクセスが集中すると,スレッドはアクセスが集中しているアプリケーションに使用されます。占有スレッド数を設定することで,Webアプリケーション内での実行に必要なスレッド数を最低限確保できるので,Webコンテナ内のほかのWebアプリケーションへのアクセスが集中した場合でも,リクエストが待ち状態になることなく,実行できます。
(a) 占有スレッド数の設定の有無によるWebアプリケーションの動作
Webアプリケーションの占有スレッド数について次の図に示します。この図を使用して,占有スレッド数を設定したWebアプリケーションと占有スレッド数を設定していない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アプリケーション単位の同時実行スレッド制御の設定では,占有スレッド数の設定は任意となります。
(b) 占有スレッド数と最大同時接続数
Webサーバの最大同時接続数(Webサーバのリバースプロキシを経由する場合)またはNIO HTTPサーバの最大同時接続数が少ないときに,占有スレッド数を設定していないWebアプリケーションへのリクエストによって最大同時接続数が占有されると,占有スレッド数を設定したWebアプリケーションにアクセスしても,Webサーバ上またはNIO HTTPサーバ上で実行待ちになったり,エラーになったりします。
占有スレッド数を設定したWebアプリケーションを,ほかのWebアプリケーションへのアクセス流量に依存しないで確実に実行させるためには,最大同時接続数に適切な値を設定する必要があります。最大同時接続数の設定方法を次に示します。
-
Webサーバの最大同時接続数の設定方法(Webサーバのリバースプロキシを経由する場合)
Webサーバのリバースプロキシを経由する場合,Webサーバの最大同時接続数を,次に示す値よりも大きい値にする必要があります。
Webサーバの最大同時接続数>Webアプリケーション単位およびデフォルトの実行待ちキューサイズの総和+Webコンテナ単位の最大同時実行スレッド数
占有スレッド数を設定する場合は,上記の式を満たすように適切な値を設定してください。
なお,Webサーバの最大同時接続数の詳細は,マニュアル「HTTP Server」を参照してください。
-
NIO HTTPサーバの最大同時接続数の設定方法
NIO HTTPサーバの最大同時接続数を次に示す値よりも大きい値にする必要があります。
NIO HTTPサーバの最大同時接続数>Webアプリケーション単位およびデフォルトの実行待ちキューサイズの総和+Webコンテナ単位の最大同時実行スレッド数
詳細については,「7. NIO HTTPサーバ」を参照してください。
(3) Webアプリケーションの実行待ちキューサイズ
Webアプリケーションの実行待ちキューサイズを設定します。
Webアプリケーションに最大同時実行スレッド数を設定している場合,実行スレッド数が最大数に達してしまうと,リクエストはキューにためられます。このときの,実行待ちのキューのサイズを,Webアプリケーション単位で指定できます。
Webアプリケーション単位の実行待ちキューサイズの設定は,Webアプリケーション単位での同時実行スレッド数を設定しているかどうかで異なります。
-
Webアプリケーション単位で同時実行スレッド数を設定している場合
Webアプリケーションごとに実行待ちキューサイズを設定できます。
-
Webアプリケーション単位で同時実行スレッド数を設定していない場合
Webアプリケーションで共通となる実行待ちキューサイズが使用されます。共通の実行待ちキューサイズのことを,デフォルトの実行待ちキューサイズといいます。
- Webアプリケーション単位およびデフォルトの実行待ちキューでの動作
-
実行待ちキューの設定が,Webアプリケーションの実行待ちキューサイズとデフォルトの実行待ちキューサイズを含め,複数ある場合,共有スレッド数を使用して実行されるリクエストの順序は,キューのリクエストのうち,先に到着したリクエストから処理されます。
- Webサーバの最大同時接続数とWebアプリケーション単位およびデフォルトの実行待ちキュー(Webサーバのリバースプロキシを経由する場合)
-
WebサーバからWebコンテナに転送されるリクエストの多重度は,Webサーバの最大同時接続数が上限となります。このため,占有スレッド数を設定する場合には,Webアプリケーション単位およびデフォルトの実行待ちキューサイズはWebサーバの最大同時接続数より少ない数にしてください。
- NIO HTTPサーバの最大同時接続数とWebアプリケーション単位およびデフォルトの実行待ちキュー
-
占有スレッド数を設定する場合には,Webアプリケーション単位およびデフォルトの実行待ちキューサイズはNIO HTTPサーバの最大同時接続数より少ない値にする必要があります。
- ポイント
-
同時実行スレッド数が最大数に達したときのリクエストの動作
Webアプリケーション単位の同時実行スレッド数が最大数に達した場合で,キューに空きがあるときは,リクエストはキューにたまります。そして,処理中のリクエスト処理が完了したあとに,順次キューからリクエストが取り出され,実行されます。なお,キューに空きがないときは,リクエストはエラーとなり,クライアントには,HTTP 503エラーが返ります。