Apache MPM ― 2006年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もできます。 |
最近のコメント