ウェブサーバ - MPM - 設定

 クラウディア
1. 概要
2. 現在の状態
3. prefork → worker

1. 概要

 「MPM」の設定をデフォルトの「prefork」から、「worker」へ切り替える方法について。  「event」への設定は、基本的に同様の手順になります。

2. 現在の状態

 現在の設定状態を見るには、「httpd.conf」を見るのが手っ取り早いのですが、コマンドで見るには・・・。

httpd -V
 デフォルトの状態で、下記のように表示されました。

Server version: Apache/2.4.51 (FreeBSD)
Server built:   unknown
Server's Module Magic Number: 20120211:118
Server loaded:  APR 1.7.0, APR-UTIL 1.6.1
Compiled using: APR 1.7.0, APR-UTIL 1.6.1
Architecture:   64-bit
Server MPM:     prefork
  threaded:     no
    forked:     yes (variable process count)
Server compiled with....
 -D APR_HAS_SENDFILE

・・・	略	・・・

 「Server MPM」の値で「prefork」だと確認できます。  当然、「threaded」が「no」になっているわけです。

3. prefork → worker


vi /usr/local/etc/apache24/httpd.conf
 67行目をコメントアウトして、68行目を有効化します。

#LoadModule mpm_event_module libexec/apache24/mod_mpm_event.so
LoadModule mpm_prefork_module libexec/apache24/mod_mpm_prefork.so
#LoadModule mpm_worker_module libexec/apache24/mod_mpm_worker.so
 ついでに、まだいじりませんが、495行目を有効化しておきます。

# Server-pool management (MPM specific)
#Include etc/apache24/extra/httpd-mpm.conf
 チェックして再起動しようとしたら、チェックの時点で・・・

$ service apache24 configtest
Performing sanity check on apache24 configuration:
[Fri Oct 29 08:33:51.925547 2021] [php:crit] [pid 2354:tid 34374492160] Apache is running a threaded MPM, but your PHP Module is not compiled to be threadsafe.  You need to recompile PHP.
AH00013: Pre-configuration failed
 うぁ、そうか、「PHP80」にした時点で、何故か、「ZTS」を有効にすると「make」でエラーになったために、「ZTS」を無効にしていましたわ。  (もしや、「Opcache JIT」を有効化したら、こけたのもこれが理由だったのか?)  困ったな・・・ちゅうことで、下記の「ports」の「ZTS」オプションをつけなおして、「make clean」「make」「make reinstall」しなおしました。

/usr/ports/lang/php80
/usr/ports/www/mod_php80
 その上で、チェックして再起動。

service apache24 configtest
service apache24 restart
 プロセスの状態をみてみますと

$ pgrep -lfa httpd
11178 /usr/local/sbin/httpd -DNOHTTPACCEPT
11179 /usr/local/sbin/httpd -DNOHTTPACCEPT
11180 /usr/local/sbin/httpd -DNOHTTPACCEPT
11181 /usr/local/sbin/httpd -DNOHTTPACCEPT
 「prefork」のときより、デフォルトで起動するプロセス数が少し少ないのですね。  親一人、子だくさんの構成は同じです。  設定状態を確認します。

Server version: Apache/2.4.51 (FreeBSD)
Server built:   unknown
Server's Module Magic Number: 20120211:118
Server loaded:  APR 1.7.0, APR-UTIL 1.6.1
Compiled using: APR 1.7.0, APR-UTIL 1.6.1
Architecture:   64-bit
Server MPM:     worker
  threaded:     yes (fixed thread count)
    forked:     yes (variable process count)
Server compiled with....
 -D APR_HAS_SENDFILE

・・・	略	・・・

 「Server MPM」「threaded」の値が変わったことが確認できました。  後で、「event」へも切り替えてみましたが、予定通りの結果になりました。  これ、テストマシンでの結果です。  運用マシンで、この設定を変えたときにどうなるか・・・。  パフォーマンスが変わるのか?乞うご期待。  でまぁ、「Apache Bench」で、比べてみると、スピードは、「prefork」とさほど変わらないというか、誤差の範囲で、いささか遅いような気がする・・・。  リソースの消費は抑えられているかもしれないのですが、スピードには、あまり影響がないというか。  ターゲットにしている環境の場合、マシンのスペックや、回線速度の方に問題があって、「MPM」の設定は、あまり影響しないように思われます。
ハイスピードプラン