MPMとはマルチプロセッシングモジュール(Multi-Processing Modules)の略です。
この仕組みは、複数台のブラウザからのアクセスに、直ぐに反応できるよう予めサーバ側でスレッドなりプロセスなりを待機させる仕組みで、prefork、worker、eventがあります。
この章では、MPMを切り替える方法を説明します。
MPMの確認
Raspberry Pi OSでApache2をインストールすると、preforkが既定インストールされます。
何がインストールされているかは、下記のコマンドで確認できます。
$ apachectl -V
Server version: Apache/2.4.57 (Debian)
Server built: 2023-04-13T03:26:51
Server's Module Magic Number: 20120211:127
Server loaded: APR 1.7.2, APR-UTIL 1.6.3, PCRE 10.42 2022-12-11
Compiled using: APR 1.7.2, APR-UTIL 1.6.3, PCRE 10.42 2022-12-11
Architecture: 64-bit
Server MPM: prefork
threaded: no
forked: yes (variable process count)
Server compiled with....
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
-D APR_USE_PROC_PTHREAD_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D DYNAMIC_MODULE_LIMIT=256
-D HTTPD_ROOT="/etc/apache2"
-D SUEXEC_BIN="/usr/lib/apache2/suexec"
-D DEFAULT_PIDLOG="/var/run/apache2.pid"
-D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
-D DEFAULT_ERRORLOG="logs/error_log"
-D AP_TYPES_CONFIG_FILE="mime.types"
-D SERVER_CONFIG_FILE="apache2.conf"
上の赤字を見ると、preforkが実装されています。
MPMの切り替え
切換の手順は下記の通りです。
- 実装されているMPMの確認
apachectl -V - 実装されているMPMの非活性化
a2dismod … - 切り替えたいMPMの活性化
asenmod … - Apache2のリスタート
systemctl restart apache2
注意点は、MPMが非活性化されたままでは、Apache2は起動しないので、必ずprefork、worker、eventの何れかのMPMを活性化してから再起動してください。
活性および非活性化の手順は下記を参照ください。
preforkの活性化、非活性化
preforkの活性化(php8.2を活性化するとmpm_preforkも活性化されます。)
$ sudo a2enmod php8.2
Considering dependency mpm_prefork for php8.2:
Considering conflict mpm_event for mpm_prefork:
Considering conflict mpm_worker for mpm_prefork:
Enabling module mpm_prefork.
Considering conflict php5 for php8.2:
Enabling module php8.2.
To activate the new configuration, you need to run:
systemctl restart apache2
$ sudo systemctl restart apache2
preforkの非活性化
$ sudo a2dismod php8.2
Module php8.2 disabled.
To activate the new configuration, you need to run:
systemctl restart apache2
$ sudo a2dismod mpm_prefork
Module mpm_prefork disabled.
To activate the new configuration, you need to run:
systemctl restart apache2
workerの活性化、非活性化
workerの活性化
$ sudo a2enmod mpm_worker
Considering conflict mpm_event for mpm_worker:
Considering conflict mpm_prefork for mpm_worker:
Enabling module mpm_worker.
To activate the new configuration, you need to run:
systemctl restart apache2
$ sudo systemctl restart apache2
workerの非活性化
$ sudo a2dismod mpm_worker
Module mpm_worker disabled.
To activate the new configuration, you need to run:
systemctl restart apache2
eventの活性化、非活性化
eventの活性化
$ sudo a2enmod mpm_event
Considering conflict mpm_worker for mpm_event:
Considering conflict mpm_prefork for mpm_event:
Enabling module mpm_event.
To activate the new configuration, you need to run:
systemctl restart apache2
$ sudo systemctl restart apache2
eventの非活性化
$ sudo a2dismod mpm_event
Module mpm_event disabled.
To activate the new configuration, you need to run:
systemctl restart apache2