Sun Java System Web Server 7.0 パフォーマンスのチューニング、サイジング、およびスケーリング

カスタムスレッドプール

デフォルトでは、接続キューはデフォルトのスレッドプールに要求を送信します。ただし、magnus.conf 内でスレッドプールの Init 関数を使ってユーザー独自のスレッドプールを作成することもできます。これらのカスタムスレッドプールは、要求の全体を処理するためではなく、NSAPI サービスアプリケーション関数 (SAF) を実行するために使用されます。

SAF がカスタムスレッドプールの使用を必要とする場合、現在の要求処理スレッドは、要求をキューに入れ、カスタムスレッドプール内の別のスレッドがその SAF を完了するまで待機したあと、その要求の残りの部分を完了します。

たとえば、obj.conf ファイルの内容が次のようになっているとします。

NameTrans fn="assign-name" from="/testmod" name="testmod" pool="my-custom-pool"
...
<Object name="testmod">
ObjectType fn="force-type" type="magnus-internal/testmod"
Service method=(GET|HEAD|POST) type="magnus-internal/testmod"
fn="testmod_service" pool="my-custom-pool2"
</Object>

この例の場合、要求は次のように処理されます。

  1. 要求処理スレッド (この例では A1 と呼ぶ) が要求を取り出し、NameTrans 指令の前の手順を実行します。

  2. URI が /testmod で始まっている場合、A1 スレッドはその要求を my-custom-pool キューに入れます。A1 スレッドは待機します。

  3. my-custom-pool 内の別のスレッドをこの例では B1 スレッドと呼びますが、A1 によってキューに入れられた要求をその B1 が取り出します。B1 がこの要求の処理を完了し、待機段階に戻ります。

  4. A1 スレッドが呼び起こされ、その要求の処理を続行します。これは、ObjectType SAF を実行したあと、Service 関数に移ります。

  5. この Service 関数は my-custom-pool2 内のスレッドによって処理される必要があるため、A1 スレッドが要求を my-custom-pool2 キューに入れます。

  6. my-custom-pool2 内の別のスレッドをこの例では C1 と呼びますが、キューに入れられた要求をその C1 が取り出します。C1 がこの要求の処理を完了し、待機段階に戻ります。

  7. A1 スレッドが呼び起こされ、その要求の処理を続行します。

この例では、3 つのスレッド A1、B1、および C1 が動作して要求の処理を完了させます。

追加のスレッドプールは、スレッドに対して安全でないプラグインを実行するための手段の 1 つです。最大スレッド数が 1 に設定されたプールを定義すると、指定されたサービス関数内で 1 つの要求しか実行できなくなります。前述の例で testmod_service がスレッドに対して安全でない場合には、そのサービスを単一のスレッドを使って実行する必要があります。my-custom-pool2 内に単一のスレッドを作成すれば、この SAF がマルチスレッド化された Web Server 内で正常に動作するようになります。

スレッドプールの定義方法の詳細については、『Sun Java System Web Server 7.0 Administrator’s Configuration File Reference』「thread-pool-init」を参照してください。