マルチプロセッシングモジュール (MPM)
この文書ではマルチプロセッシングモジュールがどのようなもので、 Apache HTTP サーバでどのように使用されるかについて解説しています。
はじめに
Apache HTTP サーバは異なる幅広い環境、多種多様なプラットホームで 動作するように、パワフルで柔軟性に富んだ設計になっています。 異なるプラットホーム・異なる環境ではしばしば、 異なる機能が必要になったり、 同じ機能でも効率のために異なる実装が必要になったりします。 Apache ではモジュール化された設計により幅広い環境に適応してきました。 この設計のおかげで、管理者は コンパイル時または実行時にどのモジュールをロードするか選ぶことによって、 どの機能をサーバに取り込むか選択することができます。
Apache 2.0 では、 このモジュール化された設計をサーバの基本機能にまで拡張しました。 サーバには精選されたマルチプロセッシングモジュール (MPM) が付いてきて、これらはマシンのネットワークポートをバインドしたり、 リクエストを受け付けたり、リクエストを扱うよう子プロセスに割り当てたり、 といった役割を持ちます。
モジュール化された設計をサーバのこのレベルまで拡張することで 二つの重要な利点が生まれます:
- Apache は幅広いオペレーティングシステムを
より美しく効率的にサポートできます。
特に Windows 版の Apache は随分効率的になりました。
なぜなら
mpm_winnt
によって、Apache 1.3 で用いられていた POSIX レイヤの代わりにネイティブのネットワーク機能を 利用できるからです。 特別化された MPM を実装した他のオペレーティングシステムでも、 同様にこの利点は生まれます。 - サーバは特定のサイト向けに、より上手にカスタマイズできます。
例えば、非常に大きなスケーラビリティを必要とするサイトでは、
worker
やevent
といったスレッド化された MPM を利用できる一方で、安定性や古いソフトウェアとの互換性を 必要とするサイトではprefork
が利用できます。
ユーザレベルでは、MPM は他の Apache モジュールと同等に見えます。 主な違いは、いつでも唯一の MPM がロードされなければならないという点です。 利用可能な MPM は module インデックスにあります。
MPM を選ぶ
MPM は設定中に選択して、サーバ内部にコンパイルされなければ なりません。 コンパイラは、スレッドが使用されている場合に様々な機能を最適化できますが、 そのためにはそもそもスレッドが使われているということを知る必要があります。
望みの MPM を実際に選ぶためには、configure
スクリプトで
--with-mpm=NAME
引数を用いてください。
NAME は望みの MPM の名前です。
サーバコンパイル後は、どの MPM が選択されたかを
./httpd -l
で確かめることができます。
このコマンドは、MPM
を含め、サーバにコンパイルで組み込まれたモジュール全てを
列挙します。
MPM デフォルト値
次表に様々な OS 向けのデフォルトの MPM 一覧を掲載しています。 コンパイル時に意図的に他を選択しなければ、自動的にこれらの MPM が選択されます。
BeOS | beos |
Netware | mpm_netware |
OS/2 | mpmt_os2 |
Unix | prefork |
Windows | mpm_winnt |