php-fpmのパフォーマンス調整
php-fpmの設定ファイル
vi /etc/php-fpm.d/www.conf
/etc/php-fpm.d
ディレクトリにある
www.conf
というファイルを
vi
で編集して php-fpm
の設定を変更する
php-fpmのパフォーマンスに関係のあるパラメーター
主に以下の項目がphp-fpmのパフォーマンスに影響する
- pm.max_children
- pm.start_servers
- pm.min_spare_servers
- pm.max_spare_servers
- pm.max_requests
pm.max_children
php-fpmのプロセスを最大でいくつまで起動するか
たくさん起動しすぎるとメモリーを消費してスワップが発生するので遅くなる
pm.start_servers
php-fpmのサービスを起動した時点でいくつのプロセスを起動させるか
サイトへのアクセスがなくてもアイドル状態のプロセスを起動して待機しておくことで
サイトへのアクセスが発生してからプロセスを起動するよりも早く処理ができる
ただし、待機するアイドルプロセスの数だけメモリーの消費量が多くなる
pm.min_spare_servers
最低でいくつのプロセスをアイドル状態で待機させておくか
基本的には pm.start_servers と同じ値にする
pm.max_spare_servers
最大でいくつのプロセスをアイドル状態で待機させておくか
サイトへのアクセスが同時に複数発生するとプロセスがいくつも立ち上がる
処理が終わったらそのプロセスは起動したままでアイドル状態に移行する
このとき、起動したままだとメモリーを消費するのでアイドル状態のプロセスがたくさんある場合は
pm.max_spare_servers で指定した数以下になるようにアイドルプロセスが自動的に終了される
pm.max_requests
プロセスを再起動するタイミングをプロセスの実行回数で指定
php-fpmのプロセスは処理を実行するたびにメモリー使用量が増えていく
「500回処理を実行したら自動的にプロセスを終了」みたいな設定をすることでメモリーリークを防ぐ
php-fpm パフォーマンス関連の設定例
pm.max_children = 100 pm.start_servers = 5 pm.min_spare_servers = 5 pm.max_spare_servers = 5 pm.max_requests = 500
pm.start_servers = 5
の指定により、php-fpmのサービスを起動した時点で5個のプロセスを待機させる
pm.min_spare_servers = 5
と pm.max_spare_servers = 5
の設定により
サイトへのアクセスがないときでも常時5個のプロセスを待機しておく
pm.max_children = 100
の設定により
サイトに複数のアクセスがあった場合はphp-fpmのプロセスを追加するけど、最大で100個まで
常時5個は起動しておく=起動しっぱなしの5個のプロセスはメモリーの消費量が増加していく
pm.max_requests = 500
の指定により、500回処理を実行したプロセスは終了する
終了するけど、pm.min_spare_servers = 5
の指定により、まっさらなプロセスがまた起動する=プロセス単位で再起動したみたいになる
その結果、結局アイドルプロセスは5個に保たれる
php-fpmを再起動
systemctl restart php-fpm
設定を変更した後は、サービスを再起動しないと設定が反映しないので注意