PG WORKS

PHPやLinux(サーバー)などのノウハウや、便利なツールを紹介していきます。

【CentOS7】Apache2.4 PreforkからEventMPMに変更手順

久しぶりの更新!
CentOS streamやらAlmaLinuxなど、CentOSの後継がリリースされている中、いまだにCentOS7使ってます。

既存の環境を移行が大変なのでしばらくは7のままかも。

今回は、ApacheのモジュールPreforkの限界を感じつつあるので、EventMPMについて調べてみました。
わからない部分もありますが(検証中と記載した部分)、都度修正していきます。

モジュールの変更
vi /etc/httpd/conf.modules.d/00-mpm.conf

LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
#↓
#LoadModule mpm_prefork_module modules/mod_mpm_prefork.so

#LoadModule mpm_event_module modules/mod_mpm_event.so
#↓
LoadModule mpm_event_module modules/mod_mpm_event.so

このままApacheの再起動しても、PHPが動かなくなるため、PHPが動作する環境にします。

PHP-FRMのインストール
#PHPのバージョンに合わせる(例ではPHP7.2)
yum install --enablerepo=remi-php72 php-fpm

#PHP-FPMの起動
systemctl start php-fpm

#サービス自動起動
systemctl enable php-fpm
バーチャルホストの設定追加(例:DocumentRoot /var/www/html/)
ProxyPassMatch ^(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/var/www/html/$1 disablereuse=on
SetEnv proxy-nokeepalive 1
MPMの設定追加
vi /etc/httpd/conf.d/mpm.conf

#↓設定値はサンプルです。
<IfModule mpm_event_module>
  StartServers 32
  ServerLimit  500
  ThreadLimit  1000
  ThreadsPerChild 1000
  MinSpareThreads 100
  MaxSpareThreads 1000
  MaxRequestWorkers 12000
  MaxConnectionsPerChild 500
</Ifmodule>
PHP-FRMの設定
vi /etc/php-fpm.d/www.conf

#apache以外で設定していた場合変更(例:sample)
user = apache
group = apache
↓
user = sample
group = sample

#子プロセスの最大数を変更(検証中)
;pm.max_children = 50
↓
pm.max_children = 500

#プロセス再起動値(検証中)
;pm.max_requests = 500
↓
pm.max_requests = 1000

#memcachedを利用している場合変更
;php_value[session.save_handler] = files
;php_value[session.save_path]    = /var/lib/php/session
↓
php_value[session.save_handler] = memcached
php_value[session.save_path]    = "「IP:ポート」"

#設定反映
service php-fpm reload

#設定ファイルにエラーがないか確認
service httpd configtest

#Apacheの再起動(ここでEvent MPMに切り替わります)
service httpd start
設定確認
#prefork OR Event MPMで動作しているか確認
httpd -V

#PHP-FPMのプロセス数
ps aux | grep php-fpm | grep -v grep | awk '{print $6, $10, $11}'

#php-fpmのプロセスの件数
ps aux | grep php-fpm | grep -v grep | awk '{print $6, $10, $11}' | wc -l

#1プロセス辺りのメモリ使用率
ps aux | grep php-fpm | grep -v grep | grep -v master | awk '{sum+=$6} END {print sum/NR}'