クライアントとの多重接続はプロセス/スレッド多重で実現し、通信プロセス数を自動で拡張/縮退する機能を備えています。
Interstage HTTP Server 2.4のプロセス構成は、環境定義ファイル(httpd.conf)において以下のディレクティブを使用して設定します。
機能概要 | ディレクティブ | 初期値 |
---|---|---|
Webサーバ起動時の通信プロセス数 | StartServers | 3 |
通信プロセス数の上限値(注1) | ServerLimit | - (省略値:16) |
クライアント同時接続数(注2) | MaxRequestWorkers | 400 |
待機状態の通信スレッド数の最小値 | MinSpareThreads | 75 |
待機状態の通信スレッド数の最大値 | MaxSpareThreads | 250 |
1つの通信プロセスにおける通信スレッド数の上限値 | ThreadLimit | - (省略値:64) |
1つの通信プロセスにおける通信スレッド数 | ThreadsPerChild | 25 |
1つの通信プロセスが処理可能な接続数 | MaxConnectionsPerChild | 0 (注3) |
注1)「MaxRequestWorkers÷ThreadsPerChild」に設定可能な最大値を設定します。剰余がある場合は、切り捨てられます。
注2)初期設定で最大同時接続数はMaxRequestWorkersの3倍になります。MPMを初期設定であるevent MPMからworker MPM、またはprefork MPMに変更した場合、最大同時接続数はMaxRequestWorkersディレクティブの値となります。MPMの詳細については「Apache HTTP サーバ バージョン 2.4 ドキュメント」を参照してください。
注3)「0」の場合、プロセスが処理する接続数に制限はありません。
ポイント
上記のディレクティブの設定値は、以下の大小関係を参考にして、指定してください。
ThreadsPerChild、ThreadLimitの大小関係
ThreadsPerChild ≦ ThreadLimit
ThreadsPerChildディレクティブは、ThreadLimitディレクティブを超えないように設定してください。
ThreadsPerChildディレクティブにThreadLimitディレクティブを超える値を設定した場合は、ThreadLimitディレクティブの値に置き換えられます。
StartServers、ServerLimit、MaxRequestWorkers、ThreadsPerChildの大小関係
StartServers ≦ ( MaxRequestWorkers ÷ ThreadsPerChild ) ≦ ServerLimit
( MaxRequestWorkers ÷ ThreadsPerChild ) は通信プロセス数の最大値です。
( MaxRequestWorkers ÷ ThreadsPerChild ) の値がServerLimitディレクティブの設定値を超える場合は、通信プロセス数の最大値はServerLimitディレクティブの設定値になります。
StartServersディレクティブに( MaxRequestWorkers ÷ ThreadsPerChild )の値を超える値を設定した場合、( MaxRequestWorkers ÷ ThreadsPerChild )の数のプロセスが起動されます。
上記のディレクティブの設定値とプロセス構成の関係について以下に説明します。
Webサーバを起動すると、デーモンプロセスはStartServersディレクティブに設定した数の通信プロセスを生成します。
注)CGIデーモンプロセスは、CGI運用時に生成されます。
クライアントからの接続要求を受け付けた場合、待機状態の通信スレッドは通信状態となります。
待機状態の通信スレッド数がMinSpareThreadsディレクティブの設定値より少ない場合は、MinSpareThreadsディレクティブの設定値以上の数になるように、通信プロセスを新しく生成します。
クライアントとの通信が切断された場合、通信状態の通信スレッドは待機状態となります。
待機状態の通信スレッド数がMaxSpareThreadsディレクティブの設定値を超過した場合は、MaxSpareThreadsディレクティブの設定値以下の数になるように、待機状態の通信プロセスを削除します。
通信プロセス数が上限値(MaxRequestWorkers÷ThreadsPerChild)に達した場合は、新しい通信プロセスを生成しません。
また、クライアントとの同時接続数(注)がMaxRequestWorkersディレクティブの設定値に達した場合は、クライアントからの新しいリクエストをオペレーティングシステム内にキューイングします。
接続待ちキュー数は、ListenBacklogディレクティブで最大数を設定します。ただし、オペレーティグシステムの仕様に応じた値が加算されます。
注)初期設定で最大同時接続数はMaxRequestWorkersの3倍になります。MPMを初期設定であるevent MPMからworker MPM、またはprefork MPMに変更した場合、最大同時接続数はMaxRequestWorkersディレクティブの値となります。MPMの詳細については「Apache HTTP サーバ バージョン 2.4 ドキュメント」を参照してください。
注)α:オペレーティグシステムの仕様に応じた値
■1つの通信プロセスが処理可能な接続数
1つの通信プロセスにおいて、プロセス生成後に受け付ける合計の接続数がMaxConnectionsPerChildディレクティブの設定値を超過した場合、新しい通信プロセスを起動します。このとき、古い通信プロセスはクライアントにレスポンス返却・コネクション切断後、終了します。
MaxConnectionsPerChildディレクティブの設定値が[0]の場合、プロセスが処理する接続数に制限はありません。