
このサイトは全然アクセス数とかも無いので今のところあまり気にしなくて良いのですが
やはりサイトのパフォーマンスは気になるところです。
過去にもこんな記事で対応したんですが、この時も MPM_Worker にしたい、MPM_Event にしたいなどと言っていますね。
色々やってみたところ、リポジトリをいじって php7.1 を入れたら php-fpm の道が開けたのでトライしました。
・まずは php7.1 化してみる
*************************************
1.apt-get install dirmnger キーの管理をするパッケージの導入。3で必要。
2./etc/apt/sources.list に http://repozytorium.mati75.eu/
で公開されているリポジトリを追加
strech用は
deb http://repozytorium.mati75.eu/raspbian stretch-backports main contrib non-free
3.キーを設定
当該ページの再下部に記載有。
gpg –keyserver pgpkeys.mit.edu –recv-key CCD91D6111A06851
gpg –armor –export CCD91D6111A06851 | apt-key add –
4.apt-get install php7.1
*************************************
私は今回 php をバージョンアップして事を進めています。既存環境には色々な php モジュールが入っています。
例えば
Zabbixとか、Wordpressとか色々入れるときに、たくさん入ってたと思うので “dpkg -l | grep php” とかで
現状入っている物を調べて同じものを入れないと動かなくなると思います。
Apache が使う php を 7.1 にしてやらなきゃいけないので
・a2dismod phpX.X
・a2enmod php7.1
を実行して php7.1 の php.ini ファイルを現行バージョンのものを参考に直して、Apache を再起動すれば php はバージョンアップ完了。
なんか zabbix 用に対応した気がしたが、忘れてしまった。エラーログ見ればわかるレベル。
・次は MPM_Event+php-fpm
Prefork では php を Apache プロセス内に読み込む部分で mod_php を使っていたと思いますが
今回の構成では、Apche と php は別プロセスで実施されるので Proxy_fcgi がリバプロのようになって php-fpm に処理依頼するような形になります。
1.apt-get install php7.1-fpm
2.a2enmod proxy_fcgi
3.a2dismod php7.1
4.a2dismod mpm_prefork
5.a2enmod mpm_event
6.vhost に以下の様な記述して php を実行できるようにする
********************************************************
<Directory /var/www/html/>
Options Includes ExecCGI FollowSymlinks
Allowoverride All
Require all granted
<FilesMatch \.php$>
SetHandler “proxy:fcgi://127.0.0.1:9000/”
</FilesMatch>
</Directory>
*********************************************************
7.例えば /etc/php/7.1/fpm/pool.d/www.conf ( fpm のコンフィグファイル)に以下記載
;listen = /run/php/php7.1-fpm.sock > コメントする。unix socket 使う場合はこの記載を使う。
listen = 127.0.0.1:9000 < 追記
Apache 再起動、fpm 再起動で反映。ps コマンドで見ると fpm のプロセスが起動しているはず。
していなければ “service php7.1-fpm start” などで上げてみたり、checkconfig で起動設定を確認してください。
・ MPM_Event と fpm のチューニング
これはサーバーリソース状況と、アクセス到来状況等によって言える事が違うので難しいですが
ラズパイは cpu コア4個に対してメモリが 1GB と少ないので、メモリ重視。
fpm のほうがメモリ使用量が多いので、こちらを基準に最大起動プロセス数を決めて
Apache 側のスレッド数を調整。というように考えました。
・fpm のパラメーター
-pm.max_children 最大プロセス数
-pm.start_servers 初期起動プロセス数
-pm.min_spare_servers 最低限稼働させるアイドルプロセス数
-pm.max_spare_servers アイドルプロセス数の最大数
-pm.process_idle_timeout アイドル時セッションタイムアウト時間
-pm.max_requests 1プロセスの最大処理数(越えたらプロセス停止)
php の使用メモリ量は可変で php.ini の指定量が最大ですが、まぁ平均値として top で RSS-SHR の値を見て決めれば良いと思います。
あまりギリギリを攻めるとメモリ不足でOSが死にます。少なめで様子を見たほうがよいでしょう。
・MPM_Event のパラメーター
-StartServers プロセス内でスレッド動き回る仕様なのでCPUコア数と同数が基本
-MinSpareThreads 最低限稼働させるアイドルスレッド数
-MaxSpareThreads アイドルスレッド数の最大数
-ThreadLimit 1プロセス内で稼働できる最大スレッド数
-ThreadsPerChild ThreadLimit と同数で良いと思います。(違いが良く分かってないです)
-MaxRequestWorkers 最大スレッド数
-MaxConnectionsPerChild 最大処理数
MPM_Event の詳しい事はこちらがとてもわかりやすいと思います。

ちなみにスレッド数確認コマンド
ps -efL| grep apache2 | grep -v grep | wc -l
こんな感じで MPM_Event + php-fpm 構成にしましたが、URLレスポンス監視上はあまり変化は見られず
これとは別途行った1画面に表示する記事数/ウィジェット を減らす対応のほうが効果が大きそうです。
(abとかでもっと調べろよって感じですが。。。)
その後、APCu の導入と、Opcache の設定見直しもしてますが、そちらはもう少し効果有無を見て書く予定です。
