Apacheのコア機能を提供するモジュールがマルチプロセッシングモジュール(MPM)です。コア機能とは、ネットワークポートをリスニングし、リクエストを受付、受け付けたリクエストを子プロセスやスレッドに割り当てるなど、Apacheが動作する上での基本的な機能のことです。

そのコア機能をOSの特性やサーバー環境に合わせて交換することができます。Apache2.2でMPMを交換するにはApacheの再ビルドが必要になりますが、最新の2.4では、Apache実行時に切り替えることもできるようになっています。

MPMの種類

MPMはプラットフォームごとに用意されています。例えば、Windows向けに最適化された「mpm_winnt」、OS/2用の「mpmt_os2」と言った具体です。

MPMは同一のプラットフォームにおいても、複数の種類が用意されています。UNIX系プラットフォームで選択可能なMPMは次の4タイプになります。

MPM 特徴
worker マルチプロセス、マルチスレッドに対応しており、各プロセスに対し決められた数のスレッドを用意する。
prefork(デフォルト) あらかじめhttpd子プロセスをいくつか生成してクライアントからの要求を処理する。
perchild マルチプロセス、マルチスレッドに対応し、かつプロセスそれぞれに個別のユーザーIDを割り当てることで可用性を高めることが可能。(Apache2.2で廃止)
event 大規模な用途向け。worker MPMのようなマルチスレッド処理に加え、Keep-Aliveリクエストの処理に、コネクションを処理するスレッドとは別のスレッドを割り当てることが可能。

Apacheはリクエスト単位でプロセスを使用する必要があり、同時に受け付けられるリクエスト数を増やすことで、それに比例してサーバーリソースも消費されます。しかし、workerやeventなどのマルチスレッド系MPMを使用すれば、スレッドでの動作が可能となります。スレッド動作はリソースあたりの処理能力がプロセス動作よりも高くなり、一般的に性能が向上し、かつ、サーバーリソースの消費も抑えられます。

ただ、最も安定して動作するのはデフォルトのpreforkと言えるでしょう。実際、event MPMはApache2.2では評価用という扱いであり、安定して動作しませんでした。特に理由がない場合、ビルド時に意図的に他を選択しなければ自動的に選択されるpreforkを選ぶのが無難とも言えます。preforkはマルチスレッドではなく、マルチプロセスのみで動作します。