Apache MPM2006年11月10日

Apache 2 の特徴として MPM というのがあります。MPM とは、Multi-Processing Module の略で、詳しいことについてはApacheのドキュメントを参照してください。

Apache 2.2 だと標準では UNIX 環境向けには prefork と worker が選択できます。また、experimental として event というものもソースコードには同梱されています。

Apache 2.0 では experimental に leader や threadpool というものも同梱されていました。

Apache のオフィシャルのソースコードレポジトリには含まれていませんが、外部で開発されているものとしては、ITK、Metuxmpm、Peruser などというものもあります。

MPM名 説明
perfork リクエストをあらかじめ fork しておいた (prefork) プロセスで処理します。すべてのプロセスは同一 uid/gid で動作します。Apache 1.3由来の伝統的な Apache のモデルです。
worker 複数のプロセスとスレッドによりリクエストを処理します。全体を制御する1つのプロセスと、複数のスレッドを作成するプロセス群により構成されます。複数のスレッドのうちのそれぞれ一つは外部からのリクエストを受けつけるために動作し、リクエストを受けると他のサーバスレッドへ処理を依頼します。
event worker と同様にスレッドを使用するMPMです。ただし実験的なものです。外部からのリクエストを待ち受けるためのスレッドに KeepAlive の処理もまかせる、というものです。Kqueue や epoll で待ち受け処理を行うので、実行可能なOSのバージョンは比較的新しいものでなくてはなりません。また、Input Filter がうまく動かないので、mod_ssl も使えません。
perchild 2.0系に同梱されていたexperimentalなMPMです。現在は開発が停止状態です。プロセスとスレッドのハイブリッドモデルですが、プロセスごとに異った uid/gid を割りあてることができます。プロセス全体のうち、uid/gidごとに何個のプロセスを割りあてるか、という設定ができました。また、VirtualHost ごとに uid/gid を変更できます。これにより、VirtualHost ごとにプロセスの数を変更できました。
leader workerのようなMPMですが、Leaders/Followersというデザインパターン[PDF]によってスレッドの処理をおこないます。experimentalなものです。
threadpool マルチスレッド系で、workerとは別の戦略を取っていたexperimentalなMPMです。workerに比べてパフォーマンスは悪く、コンセプトの一部は worker に持ちこまれたため、いまや研究目的にしかなりません。
ITK perchildのように子プロセスごとに異なった uid/gid を割りあてることができます。perchildはworker的なスレッドベースの処理ですが、itkはpreforkのように各処理を別プロセスで行うところが異なります。そのため、PHPのようなスレッドに対応してないものに向いてます。Apacheの標準のレポジトリには含まれていません。
metuxmpm 開発が停止してしまったperlchildの後継を目指しているもののようです。各uid/gidごとにchrootも可能です。
peruser metuxmpmをベースにしているMPMですが、マルチスレッドではありません。ITKのようにマルチプロセス型です。ITKやmetuxmpmと同様、プロセスごとに違うuid/gidを割りあてることができますし、chrootもできます。
<< 2006/11 >>
01 02 03 04
05 06 07 08 09 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30

RSS