6.4.1 リクエスト処理スレッド数の制御の概要
インプロセスHTTPサーバでは,起動時にリクエスト処理スレッドを作成したあと,リクエスト処理スレッドの状態,およびスレッド数を定期的に監視します。インプロセスHTTPサーバにリクエストが集中している場合は,リクエスト処理スレッドを追加して十分な予備スレッドをプールしておき,リクエストが少ない場合は余分にプールしている予備スレッドを削除します。
リクエスト処理スレッド数の制御は次のように実行します。
-
J2EEサーバ起動時に,指定した数分のリクエスト処理スレッドを作成します。
-
J2EEサーバの稼働中はリクエスト処理スレッド数を監視します。
-
監視のタイミングで,予備スレッド数が指定した最小値より少ない場合は,リクエスト処理スレッドを追加して予備スレッドとしてプールします。また,予備スレッド数が指定した最大値より多い場合は,余分な予備スレッドを削除します。
なお,J2EEサーバ起動時に作成したスレッド数を維持することもできます。起動時に作成したスレッド数を維持する場合,リクエスト処理スレッドと予備スレッドの総数が起動時に作成したスレッド数以下の場合,予備スレッド数が最大値を超えていても予備スレッドは削除されません。例えば,起動時に作成したスレッド数が8で,予備スレッド数の最大値が5の場合,リクエスト処理スレッドが2で,予備スレッド数が6のときは,予備スレッドは削除されません。
次に,リクエスト処理スレッド数の遷移について,例を使用して説明します。
-
遷移例1
次の内容が設定されていることとします。
-
Webクライアントからの最大接続数:15
-
Listenキューの登録数:100
-
J2EEサーバ起動時に作成するリクエスト処理スレッド数:8
-
予備スレッドの最小値:5
-
予備スレッドの最大値:10
-
J2EEサーバ起動時に作成したスレッド数の維持:無効
リクエスト処理スレッド数の遷移例を次の図に示します。
図6‒2 リクエスト処理スレッド数の遷移例 図中の項番1〜7について説明します。
-
J2EEサーバ起動時に,指定した数分(8スレッド)のリクエスト処理スレッドを作成します。
-
4リクエストを受信した時点で,予備スレッドが4スレッドとなり,最小値より少ないため1スレッド追加します。
-
4リクエストの処理が終了した時点で,予備スレッドが9スレッドとなり,最大値より少なく,最小値より多いため現状を維持します。
-
14リクエストを受信した時点で,予備スレッド数が最小値より少なくなっていますが,Webクライアントからの最大接続数に達しているため,予備スレッドを1スレッドだけ追加します。
-
13リクエストの処理が終了した時点で,予備スレッド数が最大値を超えているため,4スレッド削除します。
-
7リクエストを受信した時点で,予備スレッド数が最小値より少ないため,2スレッド追加します。
-
8リクエストの処理が終了した時点で,予備スレッド数が最大値を超えているため,3スレッド削除します。
-
-
遷移例2
予備スレッドの最大値をWebクライアントからの接続数の最大値と同じ値にすることによって,一度作成したリクエスト処理スレッドを削除しないで使い続けることができます。
予備スレッドの最大値をWebクライアントからの接続数の最大値と同じ値にした場合のリクエスト処理スレッド数の遷移例について説明します。
なお,ここでは,次の内容が設定されていることとします。
-
Webクライアントからの接続数の最大値:15
-
Listenキューの登録数の最大値:100
-
J2EEサーバ起動時に作成するリクエスト処理スレッド数:8
-
予備スレッドの最小値:5
-
予備スレッドの最大値:15
-
J2EEサーバ起動時に作成したスレッド数の維持:無効
予備スレッドの最大値をWebクライアントからの接続数の最大値と同じ値にした場合のリクエスト処理スレッド数の遷移例を次の図に示します。
図6‒3 予備スレッドの最大値をWebクライアントからの接続数の最大値と同じ値にした場合のリクエスト処理スレッド数の遷移例 図中の項番1〜7について説明します。
-
J2EEサーバ起動時に,指定した数分(8スレッド)のリクエスト処理スレッドを作成します。
-
4リクエストを受信した時点で,予備スレッドが4スレッドとなり,最小値より少ないため1スレッド追加します。
-
4リクエストの処理が終了した時点で,予備スレッドが9スレッドとなり,最大値より少なく,最小値より多いため現状を維持します。
-
14リクエストを受信した時点で,予備スレッド数が最小値より少なくなっていますが,リクエスト処理スレッドの総数がWebクライアントからの接続数の最大値を超えないように,予備スレッドを1スレッドだけ追加します。
-
13リクエストの処理が終了した時点で,予備スレッドが14スレッドとなりましたが,最大値より少なく,最小値より多いため現状を維持します。
-
7リクエストを受信した時点で,予備スレッドが7スレッドとなりましたが,最大値より少なく,最小値より多いため現状を維持します。
-
8リクエストの処理が終了した時点で,予備スレッド数が15スレッドとなりましたが,最大値より少なく,最小値より多いため現状を維持します。
-
-
設定例3
サーバ起動時に作成されたスレッド数を維持する場合のリクエスト処理スレッド数の遷移例について説明します。
なお,ここでは,次の内容が設定されていることとします。
-
Webクライアントからの接続数の最大値:15
-
Listenキューの登録数の最大値:100
-
J2EEサーバ起動時に作成するリクエスト処理スレッド数:8
-
予備スレッドの最小値:3
-
予備スレッドの最大値:5
-
J2EEサーバ起動時に作成したスレッド数の維持:有効
サーバ起動時に作成されたスレッド数を維持する場合のリクエスト処理スレッド数の遷移例を次の図に示します。
図6‒4 J2EEサーバ起動時に作成したスレッドを維持する場合のリクエスト処理スレッド数の遷移例 図中の項番1〜8について説明します。
-
J2EEサーバ起動時に,指定した数分(8スレッド)のリクエスト処理スレッドを作成します。
-
6リクエストを受信した時点で,予備スレッドが2スレッドとなり,最小値より少ないため1スレッド追加します。
-
6リクエストの処理が終了した時点で,予備スレッドが9スレッドとなり,最大値を超えていますが,サーバ起動時に作成したスレッド数を維持するため,1スレッドだけ削除します。
-
14リクエストを受信した時点で,予備スレッド数が最小値より少なくなっていますが,リクエスト処理スレッドの総数がWebクライアントからの接続数の最大値を超えないように,予備スレッドを1スレッドだけ追加します。
-
7リクエストの処理が終了した時点で,予備スレッドが8スレッドとなり,最大値を超えたため,3スレッド削除します。
-
3リクエストを受信した時点で,予備スレッドが2スレッドとなり,最小値より少ないため,1スレッド追加します。
-
1リクエストの処理が終了した時点で,予備スレッド数が4スレッドとなりましたが,最大値より少なく,最小値より多いため現状を維持します。
-
9リクエストの処理が終了した時点で,予備スレッド数が13スレッドとなり,最大値より多くなっていますが,J2EEサーバ起動時のスレッド数を維持するため,5スレッドだけ削除します。
-