マルチプロセッシングモジュール (MPM)

この文書ではマルチプロセッシングモジュールがどのようなもので、 Apache HTTP サーバでどのように使用されるかについて解説しています。

はじめに

Apache HTTP サーバは異なる幅広い環境、多種多様なプラットホームで 動作するように、パワフルで柔軟性に富んだ設計になっています。 異なるプラットホーム・異なる環境ではしばしば、 異なる機能が必要になったり、 同じ機能でも効率のために異なる実装が必要になったりします。 Apache ではモジュール化された設計により幅広い環境に適応してきました。 この設計のおかげで、管理者は コンパイル時または実行時にどのモジュールをロードするか選ぶことによって、 どの機能をサーバに取り込むか選択することがができます。

Apache 2.0 では、 このモジュール化された設計をサーバの基本機能にまで拡張しました。 サーバには精選されたマルチプロセッシングモジュール (MPM) が付いてきて、これらはマシンのネットワークポートをバインドしたり、 リクエストを受け付けたり、リクエストを扱うよう子プロセスに割り当てたり、 といった役割を持ちます。

モジュール化された設計をサーバのこのレベルまで拡張することで 二つの重要な利点が生まれます:

ユーザレベルでは、MPM は他の Apache モジュールと同等に見えます。 主な違いは、いつでも唯一の MPM がロードされなければならないという点です。 利用可能な MPM は module インデックスにあります。

MPM を選ぶ

MPM は設定中に選択して、サーバ内部にコンパイルされなければ なりません。 コンパイラは、スレッドが使用されていれば様々な機能を最適化できますが、 そもそもスレッドが使われているということを知る必要があります。 MPM には Unix 上でスレッドを用いるものや、スレッドをまったく 使わないものがあるので、 Apache は、MPM が設定中に選択されて Apache 内部に組み込まれた場合の方が 常により良いパフォーマンスを発揮します。

望みの MPM を実際に選ぶためには、configure スクリプトで --with-mpm= NAME 引数を用いてください。 NAME は望みの MPM の名前です。

サーバコンパイル後は、どの MPM が選択されたかを ./httpd -l で確かめることができます。 このコマンドは、MPM を含め、サーバにコンパイルで組み込まれたモジュール全てを 列挙します。

MPM デフォルト値

次表に様々な OS 向けのデフォルトの MPM 一覧を掲載しています。 コンパイル時に意図的に他を選択しなければ、自動的にこれらの MPM が選択されます。

BeOSbeos
Netwarempm_netware
OS/2mpmt_os2
Unixprefork
Windowsmpm_winnt