2.16.7 同時実行スレッド数および実行待ちキューサイズの設定例(URLグループ単位)
同時実行スレッド数およびURLグループ単位の実行待ちキューサイズの設定例について説明します。ここでは,Webサーバ連携機能を使用する場合の例について説明します。
(1) 説明で使用するWebアプリケーションの設定例
この例では,Webコンテナに二つのWebアプリケーションがデプロイされていて,そのうちの一つのWebアプリケーションにWebアプリケーション単位での同時実行スレッド数制御およびURLグループ単位の同時実行スレッド数制御がされているものとします。設定内容を次に示します。
-
Webサーバの最大同時接続数:40
-
Webコンテナ単位の最大同時実行スレッド数:8
-
デフォルトの実行待ちキューサイズ:5
-
Webアプリケーション単位の同時実行スレッド数制御の設定
WebアプリケーションAに次の内容が設定されているものとします。なお,WebアプリケーションBでは,Webアプリケーション単位の同時実行スレッド数制御の設定はありません。
Webアプリケーション名
最大同時実行スレッド数
占有スレッド数
Webアプリケーション単位の実行待ちキューサイズ
WebアプリケーションA
7
3
5
-
URLグループ単位の同時実行スレッド数制御の設定
WebアプリケーションAでは,次に示すURLグループの設定がされているものとします。なお,Control Cには,URLグループ単位の同時実行スレッド数制御の設定はありません。
URLグループ名
URLパターン
最大同時実行スレッド数
占有スレッド数
URLグループ単位の実行待ちキューサイズ
Control A
/health_check.jsp
1
1
1
Control B
/create_pdf
3
2
5
URLグループ単位でスレッド数を制御する場合の例を,次の図に示します。
(2) 各Webアプリケーションで使用できるスレッド数
図2-23の設定の場合に使用できる最大同時実行スレッド数,占有スレッド数,および実行待ちキューサイズについて,WebアプリケーションまたはURLグループごとに説明します。なお,説明の項番は,図中の項番と対応しています。
-
WebアプリケーションA
WebアプリケーションAでは同時実行スレッド数制御を設定しています。また,WebアプリケーションA内の業務ロジック(Control AおよびControl B)にはURLグループ単位の同時実行スレッド数制御を設定しています。
ここでは,WebアプリケーションAのスレッド数について説明します。
-
最大同時実行スレッド数および占有スレッド数
最大同時実行スレッド数および占有スレッド数が設定されているので,それぞれ設定された値までスレッド数を使用できます。
WebアプリケーションAの同時に実行できるスレッド数は最大で7スレッドです。そのうち,3スレッドは,WebアプリケーションAで最低限確保できる占有スレッド数となります。
-
共有スレッド数
WebアプリケーションA全体で使用できる共有スレッド数は,WebアプリケーションAの最大同時実行スレッド数−占有スレッド数の合計となります。この場合7−3となるので,共有スレッド数は4となります。
-
Webアプリケーション単位の実行待ちキューサイズ
WebアプリケーションAではWebアプリケーション単位の実行待ちキューサイズを指定しています。WebアプリケーションA全体で同時に7スレッド使用している場合,リクエストは最大で5個,Webアプリケーション単位の実行待ちキューにたまります。なお,このキューは,Webアプリケーション内の業務ロジックのうち,URLグループ単位の同時実行スレッド数制御を設定していない,Control Cの業務ロジックへのリクエストに使用されます。
-
-
Control A(/health_check.jspへのリクエスト)
-
最大同時実行スレッド数および占有スレッド数
Control Aでは,最大同時実行スレッド数および占有スレッド数が設定されているので,それぞれ設定された値までスレッド数を使用できます。
Control Aでは,同時に実行できるスレッド数は最大で1スレッドです。この1スレッドはControl Aで最低限確保できる占有スレッドでもあります。なお,Control Aの占有スレッド数はWebアプリケーションAの占有スレッドのうちの一つとなります。
-
URLグループ単位の実行待ちキューサイズ
Control AではURLグループ単位の実行待ちキューサイズを指定しています。Control Aで1スレッド使用している場合,リクエストは最大で1個,URLグループ単位の実行待ちキューにたまります。
-
-
Control B(/create_pdfへのリクエスト)
-
最大同時実行スレッド数および占有スレッド数
Control Bでは,最大同時実行スレッド数および占有スレッド数が設定されているので,それぞれ設定された値までスレッド数を使用できます。
Control Bでは,同時に実行できるスレッド数は最大で3スレッドです。そのうち2スレッドは,Control Bで最低限確保できる占有スレッドです。なお,Control Bの占有スレッド数はWebアプリケーションAの占有スレッドのうちの二つとなります。
-
URLグループ単位の実行待ちキューサイズ
Control BではURLグループ単位の実行待ちキューサイズを指定しています。Control Bで3スレッド使用している場合,リクエストは最大で5個,URLグループ単位の実行待ちキューにたまります。
-
-
Control Cの処理
WebアプリケーションA内の,Control Cへのリクエストに対しては,同時実行スレッド数制御を設定していません。
このため,次のように動作します。
-
最大同時実行スレッド数
WebアプリケーションAの共有スレッド数が最大同時実行スレッド数になります。WebアプリケーションAの共有スレッド数は4スレッドであるため,Control Cの処理の最大同時実行スレッド数は4になります。
また,同時実行スレッド数制御を設定してないため,占有スレッド数はありません。このため,Control AまたはBへのアクセスが集中し,WebアプリケーションA内で使用できるスレッドがなくなると,Control Cの業務ロジックの処理は実行待ちになります。
-
Webアプリケーション単位の実行待ちキューサイズ
Control Cの業務ロジックの処理で実行待ちが発生した場合,これらの処理へのリクエストは,キューにたまります。Control Cの業務ロジックではURLグループ単位の実行待ちキューサイズを指定していないため,キューはWebアプリケーションAの実行待ちキューにためられます。リクエストは,最大で5個,キューにたまります。
-
-
WebアプリケーションB
WebアプリケーションBでは,Webアプリケーション単位の同時実行スレッド制御を設定していません。
このため,次のように動作します。
-
最大同時実行スレッド数
Webコンテナの共有スレッド数が最大同時実行スレッド数になります。Webコンテナの共有スレッド数は,次の式で求められます。
Webコンテナの最大同時実行スレッド数−WebアプリケーションAの占有スレッド数
この例の場合,8−3となるため,WebアプリケーションBの最大同時実行スレッド数は5になります。
-
デフォルトの実行待ちキューサイズ
WebアプリケーションBで実行待ちが発生した場合,WebアプリケーションBへのリクエストは,キューにたまります。WebアプリケーションBではWebアプリケーション単位の実行待ちキューサイズを指定していないため,キューはデフォルトの実行待ちキューにためられます。リクエストは,最大で5個,キューにたまります。
- 参考
-
Webコンテナでは,スレッドは静的コンテンツやリクエストのエラー処理にも使用されます。これらの目的で使用されるスレッド数は,次の式から求められます。
- Webサーバの処理スレッド数−(Webコンテナ単位の最大同時実行スレッド数+実行待ちキューサイズの総和※)
-
注※ 実行待ちキューサイズの総和とは,この図の場合,Webコンテナ,WebアプリケーションA,Control A,およびControl Bの実行待ちキューサイズを足した値となります。
このため,この図の例の場合,40−(8+(5+5+1+5))となり,静的コンテンツやリクエストのエラー処理に使用されるスレッド数は,16スレッドとなります。
-