php-fpmのパフォーマンス調整

vi /etc/php-fpm.d/www.conf

/etc/php-fpm.d ディレクトリにある
www.conf というファイルを
vi で編集して php-fpm の設定を変更する

主に以下の項目がphp-fpmのパフォーマンスに影響する

  • pm.max_children
  • pm.start_servers
  • pm.min_spare_servers
  • pm.max_spare_servers
  • pm.max_requests

php-fpmのプロセスを最大でいくつまで起動するか

たくさん起動しすぎるとメモリーを消費してスワップが発生するので遅くなる

php-fpmのサービスを起動した時点でいくつのプロセスを起動させるか

サイトへのアクセスがなくてもアイドル状態のプロセスを起動して待機しておくことで
サイトへのアクセスが発生してからプロセスを起動するよりも早く処理ができる

ただし、待機するアイドルプロセスの数だけメモリーの消費量が多くなる

最低でいくつのプロセスをアイドル状態で待機させておくか

基本的には pm.start_servers と同じ値にする

最大でいくつのプロセスをアイドル状態で待機させておくか

サイトへのアクセスが同時に複数発生するとプロセスがいくつも立ち上がる
処理が終わったらそのプロセスは起動したままでアイドル状態に移行する

このとき、起動したままだとメモリーを消費するのでアイドル状態のプロセスがたくさんある場合は
pm.max_spare_servers で指定した数以下になるようにアイドルプロセスが自動的に終了される

プロセスを再起動するタイミングをプロセスの実行回数で指定

php-fpmのプロセスは処理を実行するたびにメモリー使用量が増えていく
「500回処理を実行したら自動的にプロセスを終了」みたいな設定をすることでメモリーリークを防ぐ

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 = 5pm.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個に保たれる

systemctl restart php-fpm

設定を変更した後は、サービスを再起動しないと設定が反映しないので注意

  • 最終更新: 2023/05/12 23:47