phpの実装方式
php7_module
FPM/FastCGI
CGI/FastCGI
のどれがいいのか・・・
php実装、チェック項目
●https://(FQDN1)/
●https://(FQDN2)/
●https://(FQDN3)/
●https://(FQDN4)/
の、4つのワードプレスのサイトに関して、
php7_module(すべて同じユーザ権限) FPM/FastCGI(すべて同じユーザ権限) FPM/FastCGI(サイト毎に違うユーザ権限) CGI/FastCGI(サイト毎に違うユーザ権限)
の4つの比較。
・httpd / MySQL / 全体 のメモリ使用量 ・読み込み速度 ・処理能力
をチェックしてみた。
httpd / MySQL / 全体 のメモリ使用量
は、htopの「PERCENT_MEM (MEM%)」の値
読み込み速度
は、「PageSpeed Insights」による指標
処理能力
は、ad(ApacheBench)コマンドによる「Requests per second」の値
# ab -n 100 -c 100 https://(FQDN)/ This is ApacheBench, Version 2.3 <$Revision: 1430300 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking (FQDN) (be patient).....done Server Software: Apache/2.4.46 Server Hostname: (FQDN) Server Port: 443 SSL/TLS Protocol: TLSv1.2,ECDHE-RSA-AES256-GCM-SHA384,2048,256 Document Path: / Document Length: 48023 bytes Concurrency Level: 100 Time taken for tests: 6.640 seconds Complete requests: 100 Failed requests: 0 Write errors: 0 Total transferred: 4844700 bytes HTML transferred: 4802300 bytes Requests per second: 15.06 [#/sec] (mean) Time per request: 6640.226 [ms] (mean) Time per request: 66.402 [ms] (mean, across all concurrent requests) Transfer rate: 712.50 [Kbytes/sec] received
の「Requests per second」の数字を拾ってみました。
ad(ApacheBench)によるチェック方法
サーバー再起動後、
# ab -n 100 -c 100 (FQDN1) # ab -n 100 -c 100 (FQDN2) # ab -n 100 -c 100 (FQDN3) # ab -n 100 -c 100 (FQDN4)
と行い、
2回目、
# ab -n 100 -c 100 (FQDN1) # ab -n 100 -c 100 (FQDN2) # ab -n 100 -c 100 (FQDN3) # ab -n 100 -c 100 (FQDN4)
のそれぞれの実施後に、「htop」測定、「PageSpeed Insights」でのチェック、
「ad(ApacheBench)」の結果をまとめた。
測定値は、4つのサイトの平均を求めている。
サーバー
Conoha VPS
Centos7 3core/2G
Apache/2.4.46
php 7.4.19
測定結果
メモリ
httpd メモリ使用率 | MySQL メモリ使用率 | 全体 メモリ使用率 |
|
php7_module (すべて同じユーザ権限) | 50.75% | 14.13% | 64.70% |
FPM/FastCGI (すべて同じユーザ権限) | 0.55% | 12.30% | 25.76% |
FPM/FastCGI (サイト毎に違うユーザ権限) | 0.53% | 12.25% | 42.08% |
CGI/FastCGI (サイト毎に違うユーザ権限) | 0.48% | 5.05% | 76.66% |
(横にスクロールできます)
↑ php7_moduleは、apache(httpd)に組み込まれているので、apache(httpd)のメモリ使用率が大きくなる。
FPM/FastCGIは、apache(httpd)のメモリ利用率は、少なく、全体でも、メモリ利用率は、少ない。あらかじめ、php-fpmが、起動しているが、大幅にメモリを占有はしていない。
CGI/FastCGIは、FPM/FastCGIと、同様に、apache(httpd)のメモリ使用率は少ない。全体のメモリ使用率が大きく、このことから、phpに対して、メモリは使われている。
言い換えると、アクセスが増えると、
php7_moduleとFPM/FastCGIは、メモリの変動は少ないが、
CGI/FastCGIは、複数のphpプロセスが誕生/終了するので、メモリ使用量の変動が激しい。
反応速度
SEOにも重要な要素である、「反応速度」。
開いた瞬間にコンテンツが出てくると、見ていても気持ちがいい。
今回、「PageSpeed Insights」でチェックをしたが、phpの実装方法による差異は、見られなかった。
この改善は、キャッシュ、反応速度を除外する要素の排除などで、地道にやっていくのがいいのであろう。
処理能力
Requests per second | |
php7_module (すべて同じユーザ権限) | 6.2 |
FPM/FastCGI (すべて同じユーザ権限) | 12.41 |
FPM/FastCGI (サイト毎に違うユーザ権限) | 12.62 |
CGI/FastCGI (サイト毎に違うユーザ権限) | 7.7 |
(横にスクロールできます)
abコマンドによる「Requests per second」の数字を拾ってみた。
数字が大きい方が処理能力が高い。
FPM/FastCGI > CGI/FastCGI > php7_module
の順番であった。
その他比較項目
違うバージョン同居 | php.ini指定 | |
php7_module (すべて同じユーザ権限) | ○ | △ |
FPM/FastCGI (すべて同じユーザ権限) | ○ | △ |
FPM/FastCGI (サイト毎に違うユーザ権限) | ○ | △ |
CGI/FastCGI (サイト毎に違うユーザ権限) | ○ | ○ |
(横にスクロールできます)
違うバージョンの同居
php7_module
FPM/FastCGI
CGI/FastCGI
どの方式でも、違うバージョンの同居は可能である。
php.iniの指定
php7_module
FPM/FastCGI
上記は、特定の変数は変更可能である。
CGI/FastCGI
は、php.ini自体を指定ができる。
php実装方法、まとめ
メモリ | 処理能力 | 異なる バージョン | php.ini 指定 | ユーザ権限 実行 |
|
php7_module (すべて同じユーザ権限) | △ | △ | ○ | △ | ○ |
FPM/FastCGI (すべて同じユーザ権限) | ○ | ○ | ○ | △ | ○ |
FPM/FastCGI (サイト毎に違うユーザ権限) | ○ | ○ | ○ | △ | ○ |
CGI/FastCGI (サイト毎に違うユーザ権限) | △ | △ | ○ | ○ | ○ |
(横にスクロールできます)
phpだけの事を考えると・・・
php.iniを個別設定するという共有サーバー的なものなら、CGI/FastCGI
そうでなかったら、FPM/FastCGIがいいのではないでしょうか。
(細かなカスタマイズ(設定)で、測定値が変わる可能性があります)