16.3.1 Webサーバでのリクエスト処理スレッド数を制御する
Webフロントシステムの場合,Webブラウザなどのクライアントからのリクエストは,Webサーバが作成するリクエスト処理スレッドによって処理されます。リクエスト処理スレッド数を適切に制御することで,処理性能の向上が図れます。
ここでは,Webサーバでのリクエスト処理スレッド数を制御する目的と,チューニングの指針について説明します。
なお,ここでは,インプロセスHTTPサーバを使用している場合のチューニングの方法について説明します。
- 参考
-
Webサーバ連携時にHTTP Serverを使用している場合は,HTTP Serverの設定で同様のチューニングができます。詳細は,マニュアル「HTTP Server」を参照してください。
また,Smart Composer機能を使用してシステムを構築する場合,Webサーバでのリクエスト処理スレッド数の設定は,抽象パラメタの利用によって設定できます。抽象パラメタとは,互いに関連のあるパラメタを一つにまとめたパラメタです。抽象パラメタを利用することで,Webサーバのリクエスト処理スレッド数の設定を,同時実行スレッド数などの関連するパラメタと一緒に定義できます。抽象パラメタについては,マニュアル「アプリケーションサーバ リファレンス コマンド編」の「付録I Smart Composer機能で使用できる抽象パラメタ(V9互換モードの場合)」を参照してください。
- 〈この項の構成〉
(1) リクエスト処理スレッド数を制御する目的
リクエスト処理スレッド数をJ2EEサーバが動作しているホストの性能やクライアントからのアクセス状況に合わせてチューニングすることで,性能向上を図れます。
リクエスト処理スレッドの生成は,負荷が高い処理です。リクエスト処理スレッドをあらかじめ生成してプールしておくことで,Webブラウザなどのクライアントからのリクエスト処理要求時の負荷を軽くして,処理性能を高めることができます。
インプロセスHTTPサーバを使用する場合,J2EEサーバ起動時にリクエスト処理スレッドをまとめて生成してプールしておき,Webブラウザなどのクライアントからリクエスト処理要求があった場合にそれを利用するようにできます。これによって,リクエスト処理要求時の処理性能の向上を図れます。なお,プールしているスレッドの数を監視しておくことで,プールしているスレッド数が少なくなった場合はさらに追加生成して,プールに確保しておくこともできます。
ただし,使用しないスレッドを大量にプールしておくと,むだなリソースを消費します。このため,システムの処理内容に応じて,プールするリクエスト処理スレッド数を適切に制御し,場合によっては不要なスレッドを削除することが必要です。
リクエスト処理スレッドの制御では,これらを考慮して,パラメタに適切な値を設定してください。
(2) 設定の指針
リクエスト処理スレッド数の制御では,次のパラメタを使用してチューニングできます。
-
J2EEサーバ起動時に生成するリクエスト処理スレッドの数
-
Webクライアントとの接続数(リクエスト処理スレッド数)の上限数
-
接続数の上限を超えた場合のTCP/IPのListenキュー(バックログ)の最大値
-
予備スレッド数の最大数および最小数
-
J2EEサーバ起動時に生成したリクエスト処理スレッド数を維持するかどうかの選択
これらのパラメタを設定するときには,次の点に留意してください。
-
提供するサービスの内容によっては,J2EEサーバ起動直後から大量のリクエストを処理する必要があります。この場合は,J2EEサーバ起動時に生成するリクエスト処理スレッドの数に,大きな値を指定してください。
-
予備スレッド数の最大数を大きくしておくと,クライアントからのアクセスが急に増加した場合にも,処理性能を下げることなく迅速に対応できます。ただし,多くの予備スレッドをプールしておくと,多くのリソースが消費されます。このため,急な増加が予想されるアクセス数を見積もって,適切な数の予備スレッドがプールされるように,注意して設定してください。
-
一定数のリクエスト処理スレッドは確保した状態で,それを超えるリクエスト処理スレッドの増減を最大数と最小数を指定して制御したい場合は,J2EEサーバ起動時に生成したリクエスト処理スレッド数を維持する設定にしてください。これによって,システムとして最低確保しておきたい数のリクエスト処理スレッドを確保した状態で,クライアントからのアクセスピーク時のリクエスト処理スレッド数の増減に対応できます。未使用のリクエスト処理スレッド数が予備スレッド数の最大値を超えている場合も,J2EEサーバ起動時に生成した数のリクエスト処理スレッドは維持されます。
-
一度作成したスレッドを削除しないでプールし続けたい場合は,予備スレッド数の最大数を,Webクライアントとの最大接続数と同じ値にしてください。
このほか,Webアプリケーションの同時実行スレッド数との関係についても留意してください。Webアプリケーションの同時実行スレッド数については,「16.3.2 Webアプリケーションの同時実行数を制御する」を参照してください。