Cosminexus 機能解説

[目次][用語][索引][前へ][次へ]

4.19.2 Webアプリケーション単位の設定パラメタ

ここでは,Webアプリケーション単位でスレッド数を制御する場合の設定について説明します。Webアプリケーション単位でスレッド数を制御する場合は,次の設定が必要になります。

  1. Webコンテナ単位の同時実行スレッド数制御の設定
    Webコンテナ単位の最大同時実行スレッド数を設定します。なお,ここで設定した最大同時実行スレッド数は,Webコンテナ上にデプロイされているすべてのWebアプリケーションで共有します。
    Webコンテナ単位での最大同時実行スレッドについては,「4.18 Webコンテナ単位での同時実行スレッド数の制御」を参照してください
  2. Webアプリケーション単位の同時実行スレッド数制御の設定
    同時実行スレッド数を制御したいWebアプリケーションに対して,次に示すパラメタを設定します。
    • 最大同時実行スレッド数
      Webアプリケーションで最大で幾つのスレッドを同時に実行できるかを設定します。
    • 占有スレッド数
      Webアプリケーションの占有スレッド数を設定します。
    • 実行待ちキューサイズ
      Webアプリケーションの実行待ちキューサイズを設定します。
    • デフォルトの実行待ちキューサイズ
      Webアプリケーション単位の同時実行スレッド数制御を設定していないWebアプリケーションのための,実行待ちキューサイズを設定します。

以降で,Webアプリケーション単位での同時実行スレッド数制御の設定項目の詳細を説明します。

<この項の構成>
(1) Webアプリケーションの最大同時実行スレッド数
(2) Webアプリケーションの占有スレッド数
(3) 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アプリケーションの動作を説明します。

図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アプリケーション単位の同時実行スレッド制御の設定では,占有スレッド数の設定は任意となります。

(b) 占有スレッド数と最大同時接続数

Webサーバの最大同時接続数(Webサーバ連携機能を使用する場合)またはWebクライアントからの最大同時接続数(インプロセスHTTPサーバを使用する場合)が少ないときに,占有スレッド数を設定していないWebアプリケーションへのリクエストによって最大同時接続数が占有されると,占有スレッド数を設定したWebアプリケーションにアクセスしても,Webサーバ上またはインプロセスHTTPサーバ上で実行待ちになったり,エラーになったりします。

占有スレッド数を設定したWebアプリケーションを,ほかのWebアプリケーションへのアクセス流量に依存しないで確実に実行させるためには,最大同時接続数に適切な値を設定する必要があります。最大同時接続数の設定方法を次に示します。

(3) 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エラーが返ります。