7.4.1 リクエスト処理スレッド数の制御の概要
NIO HTTPサーバにはスレッドプールがあり,一度作成したスレッドを再利用することで効率よく処理できます。スレッドプール内のスレッド数は,最小値と最大値を調整できます。最小値と最大値を同じ値にした場合は,固定スレッド数のスレッドプールとなります。
NIO HTTPサーバでのスレッド数の遷移例を次の図に示します。この例では,プロパティを次のように設定しています。
-
webserver.connector.nio_http.min_threads:5
-
webserver.connector.nio_http.max_threads:10
-
webserver.connector.nio_http.max_connections:1024
-
webserver.connector.nio_http.idle_thread_timeout:60 (秒)
図7‒2 NIO HTTPサーバでのスレッド数の遷移例
図中の項番1〜6について説明します。
-
J2EEサーバ起動直後は,スレッド数最小値に指定した数のスレッドが生成され,アイドルスレッドとして待機します。
-
同時に3多重のリクエストが投入された場合,アイドルスレッドの中の三つが実行中スレッドとなります。
-
スレッド数最小値を超えるリクエストが同時に投入された場合は,必要数分のスレッドを新たに作成します。
-
実行中スレッド数が再びスレッド数最小値を下回った場合でも,未使用となったスレッドはidle_timeout_timeoutに指定した秒数(デフォルト60秒)は待機します。
-
idle_timeout_timeoutに指定した時間経過しても実行中にならなかったアイドルスレッドは破棄されます。ただし,スレッド数最小値分のスレッドは破棄されません。
-
クライアント接続数上限は下回るが,スレッド数最大値を超えるリクエストが同時に投入された場合は,最大値を超えた分のリクエスト処理要求は実行待ちキューで待たされます。先に処理を終えてスレッドに空きが出ると,キューから取り出されて処理されます。