ApacheにはMPM(マルチプロセッシングモジュール)という仕掛けがあります。その名の通り、マルチプロセッシング機能を提供するApacheモジュールの一つ(複数ありますけど)です。注意していただきたいのは、マルチプロセッサ対応機能ではない、ということです。勿論マルチプロセッサのホストで動かすときには重要な役割を果たすことになるものですが、シングルプロセッサのホストであっても、Linux等マルチプロセスのプラットフォームであればやはり重要な役割であることは変わりありません。
ほかのモジュールは目的に応じて組み込んだり外したりできるのですが、MPMにつについては、必ず1つは組み込まなければなりません。現在Linux用に提供されているMPMはthreaded、perchild、preforkの3つです(Linuxにはmpm_winntは使えませんので)。
- threaded
- Apache 2.0ではUnix系OSのデフォルトがthreadedになっています。threadedはマルチプロセス、マルチスレッドのハイブリッド構成になっており、アクセス数が非常に多い大規模サイトに適したMPMということになっています。
threadedの場合、Apacheサーバは1つのプロセス(親プロセス)が複数の子プロセスを起動します。各々の子プロセス毎にThreadsPerChildで指定した数のスレッドを動かします。アクセスが増えてくると、子プロセスの数を増やします。常にある程度のアイドルのスレッドが存在する状態にしているので、クライアントから要求があった時に慌ててスレッドを起動する、ということはありません。勿論あまり一挙にアクセスが集中したら間に合わなくなるでしょうけれど。
- perchild
- これもマルチプロセス、マルチスレッド構成です。threadedと違うのは、perchildでは起動する子プロセス数は一定で、負荷に応じて1プロセスあたりのスレッド数を増減させる、という点です。アイドルスレッドを作っておくのは同じです。
- prefork
- preforkはApacheサーバ1.3の時のデフォルトでした。マルチスレッド機能がないプラットフォーム用と考えれば良いです。起動時にStartServersで指定されただけのプロセスを動かしておきます。負荷に応じてプロセスの数が増減されます。アイドル状態のプロセスが作ってあって、クライアントから要求に対応します。