MPM (Multi-Processing Modules) は、マシンのネットワークポートをバインドしたり、 リクエストを受け付けたり、リクエストを扱うよう子プロセスに割り当てたり、 といった役割を持つ。
Prefork
- 複数の子プロセスをローンチする
- 子プロセスは1度に1個のコネクションを処理する
- Apache2のデフォルトMPM
- Workerに比べてメモリ使用量が多い
- 常に最小限のプロセスが実行されているので、リクエストは待たずに処理される
Worker
- Preforkのように子プロセスを複数生成する
- 子プロセスは多くのスレッドを実行する
- スレッドは1度に1個のコネクションを処理する
- マルチプロセス・マルチスレッドサーバーを実現
- Preforkに比べてメモリ使用量が少ない
Event
- Apache 2.4から採用
- Workerと酷似しているが高ロードの管理用に設計されている
- より多くのリクエストを同時に処理することができる
- 他のMPMが直面する‘keep alive problem’を解決しようとするもの
- クライアントは最初のリクエスト終了後もコネクションをオープンしたまま維持し、続くリクエストを同じソケットを使って送出することができる
- 結果としてコネクションのオーバーロードが軽減される
コンパイルされているモジュールを調べる
1 2 3 4 5 |
# httpd -l Compiled in modules: core.c mod_so.c http_core.c |
ロードされているモジュールを調べる
1 |
# httpd -M |
現在有効なMPMを調べる
1 2 3 4 5 6 |
# apachectl -V ... Server MPM: prefork threaded: no forked: yes (variable process count) ... |
MPMを変更する
1 2 |
# vi /etc/httpd/conf.modules.d/00-mpm.conf # 使いたいモジュールを有効にする |
参考サイト
What is Apache MPM ( Prefork, Worker and Event )
https://tecadmin.net/apache-mpm-prefork-and-worker-and-event/
マルチプロセッシングモジュール (MPM) – Apache HTTP サーバ バージョン 2.4
https://httpd.apache.org/docs/2.4/ja/mpm.html
prefork – Apache HTTP サーバ バージョン 2.4
https://httpd.apache.org/docs/2.4/ja/mod/prefork.html
worker – Apache HTTP サーバ バージョン 2.4
https://httpd.apache.org/docs/2.4/ja/mod/worker.html
event – Apache HTTP Server Version 2.4
https://httpd.apache.org/docs/2.4/ja/mod/event.html