Cosminexus 機能解説

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

4.20.3 同時実行スレッド数および実行待ちキューサイズの設定例(URLグループ単位)

同時実行スレッド数および実行待ちキューサイズの設定例について説明します。ここでは,Webサーバ連携機能を使用する場合の例について説明します。

<この項の構成>
(1) 説明で使用するWebアプリケーションの設定例
(2) 各Webアプリケーションで使用できるスレッド数

(1) 説明で使用するWebアプリケーションの設定例

この例では,Webコンテナに二つのWebアプリケーションがデプロイされていて,そのうちの一つのWebアプリケーションにWebアプリケーション単位での同時実行スレッド数制御およびURLグループ単位の同時実行スレッド数制御がされているものとします。設定内容を次に示します。

URLグループ単位でスレッド数を制御する場合の例を,次の図に示します。

図4-28 URLグループ単位の設定例

[図データ]

(2) 各Webアプリケーションで使用できるスレッド数

図4-28の設定の場合に使用できる最大同時実行スレッド数,占有スレッド数,および実行待ちキューサイズについて,WebアプリケーションまたはURLグループごとに説明します。なお,説明の項番は,図中の項番と対応しています。

  1. 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アプリケーションAでは実行待ちキューサイズを指定しています。WebアプリケーションA全体で同時に7スレッド使用している場合,リクエストは最大で5個,実行待ちキューにたまります。なお,このキューは,Webアプリケーション内の業務ロジックのうち,URLグループ単位の同時実行スレッド数制御を設定していない,Control Cの業務ロジックへのリクエストに使用されます。
  2. Control A(/health_check.jspへのリクエスト)
    • 最大同時実行スレッド数および占有スレッド数
      Control Aでは,最大同時実行スレッド数および占有スレッド数が設定されているので,それぞれ設定された値までスレッド数を使用できます。
      Control Aでは,同時に実行できるスレッド数は最大で1スレッドです。この1スレッドはControl Aで最低限確保できる占有スレッドでもあります。なお,Control Aの占有スレッド数はWebアプリケーションAの占有スレッドのうちの一つとなります。
    • 実行待ちキューサイズ
      Control Aでは実行待ちキューサイズを指定しています。Control Aで1スレッド使用している場合,リクエストは最大で1個,実行待ちキューにたまります。
  3. Control B(/create_pdfへのリクエスト)
    • 最大同時実行スレッド数および占有スレッド数
      Control Bでは,最大同時実行スレッド数および占有スレッド数が設定されているので,それぞれ設定された値までスレッド数を使用できます。
      Control Bでは,同時に実行できるスレッド数は最大で3スレッドです。そのうち2スレッドは,Control Bで最低限確保できる占有スレッドです。なお,Control Bの占有スレッド数はWebアプリケーションAの占有スレッドのうちの二つとなります。
    • 実行待ちキューサイズ
      Control Bでは実行待ちキューサイズを指定しています。Control Bで3スレッド使用している場合,リクエストは最大で5個,実行待ちキューにたまります。
  4. Control Cの処理
    WebアプリケーションA内の,Control Cへのリクエストに対しては,同時実行スレッド数制御を設定していません。
    このため,次のように動作します。
    • 最大同時実行スレッド数
      WebアプリケーションAの共有スレッド数が最大同時実行スレッド数になります。WebアプリケーションAの共有スレッド数は4スレッドであるため,Control Cの処理の最大同時実行スレッド数は4になります。
      また,同時実行スレッド数制御を設定してないため,占有スレッド数はありません。このため,Control AまたはBへのアクセスが集中し,WebアプリケーションA内で使用できるスレッドがなくなると,Control Cの業務ロジックの処理は実行待ちになります。
    • 実行待ちキューサイズ
      Control Cの業務ロジックの処理で実行待ちが発生した場合,これらの処理へのリクエストは,キューにたまります。Control Cの業務ロジックでは実行待ちキューサイズを指定していないため,キューはWebアプリケーションAの実行待ちキューにためられます。リクエストは,最大で5個,キューにたまります。
  5. WebアプリケーションB
    WebアプリケーションBでは,Webアプリケーション単位の同時実行スレッド制御を設定していません。
    このため,次のように動作します。
    • 最大同時実行スレッド数
      Webコンテナの共有スレッド数が最大同時実行スレッド数になります。Webコンテナの共有スレッド数は,次の式で求められます。
       Webコンテナの最大同時実行スレッド数−WebアプリケーションAの占有スレッド数
      この例の場合,8−3となるため,WebアプリケーションBの最大同時実行スレッド数は5になります。
    • 実行待ちキューサイズ
      WebアプリケーションBで実行待ちが発生した場合,WebアプリケーションBへのリクエストは,キューにたまります。WebアプリケーションBでは実行待ちキューサイズを指定していないため,キューはデフォルトの実行待ちキューにためられます。リクエストは,最大で5個,キューにたまります。
      参考
      Webコンテナでは,スレッドは静的コンテンツやリクエストのエラー処理にも使用されます。これらの目的で使用されるスレッド数は,次の式から求められます。

      Webサーバの処理スレッド数−(Webコンテナ単位の最大同時実行スレッド数+実行待ちキューサイズの総和
      注※ 実行待ちキューサイズの総和とは,この図の場合,Webコンテナ,WebアプリケーションA,Control A,およびControl Bの実行待ちキューサイズを足した値となります。
      このため,この図の例の場合,40−(8+(5+5+1+5))となり,静的コンテンツやリクエストのエラー処理に使用されるスレッド数は,16スレッドとなります。