PHP-FPMのプロセス設定を行いサーバのメモリ消費を抑える方法
CentOS7からAlmaLlinux8に移行してから微妙にサーバのレスポンスが遅い気がした。topコマンドで確認してみるとphp-fpmが多数立ち上がっており、こちらがメモリを消費しているように見受けられる。適切なプロセス設定を行うことで多少抑制できるようなので対応方法をメモ。
対応方法
平均メモリ数の計算
こちらのサイトを参考にphp-fpmによるプロセスの平均メモリ数を計算する。まずはサーバにSSH接続し以下コマンドで平均メモリ数を割り出す。
ps --no-headers -o "rss,cmd" -C php-fpm | awk '{ sum+=$1 } END { printf ("%d%s\n", sum/NR/1024,"M") }'
プロセス数の計算
ざっくりと以下のように計算すると良いみたい。
- pm.max_children = 使用可能メモリ / プロセスの平均メモリ使用量
- pm.start_servers = max_children * 25%
- pm.min_spare_servers = max_children * 25%
- pm.max_spare_servers = max_children * 75%
当方の環境で計算するとpm.max_childrenは13となったが念のため余裕を持たせて10にする。その上で計算するとざっくりと以下のような形で設定してみる。
- pm.max_children = 10
- pm.start_servers = 2
- pm.min_spare_servers = 2
- pm.max_spare_servers = 7
ちなみに各設定項目の詳細はリファレンスによると以下の通り。
- pm.max_children → 子プロセスの数
- pm.start_servers → 起動時に作成される子プロセスの数
- pm.min_spare_servers → アイドル状態のサーバープロセス数の最小値
- pm.max_spare_servers → アイドル状態のサーバープロセス数の最大値
設定変更
#ディレクトリ移動 cd /etc/php-fpm.d #設定ファイルのバックアップ cp www.conf www.conf.【日付】 #設定ファイルを開く vi www.conf
設定ファイルを開いたら先ほど計算した値に書き換え、「:wq」で上書き保存する。
その後以下コマンドでphp-fpmを再起動すると反映される筈。
systemctl restart php-fpm
所感
こちらのページと似たような環境(メモリ1GB)で各設定値も大きくは外れていないため恐らく大丈夫じゃないかと思われる。しばらくは様子見する。
参考サイト
関連記事
-
-
ブラウザ上でファイルのアップ・ダウンロードが可能なTiny File Managerの利用方法
ブラウザ上でファイルのアップ・ダウンロードが可能なファイルマネージャーを設置した ...
-
-
PHPで画像のフォーマット(拡張子)の変換
画像のアップロードでjpg/png/gif形式を受け付けつつ、 最終的にjpgで ...
-
-
PHPで配列をGETパラメータ化、GETパラメータを配列化する方法
PHPで配列を「name=hoge&id=1&pass=fdkn ...
-
-
PHPのdefine()で配列データの定義と利用方法について
他社が作成したPHPのソースコードを拝見した際に定数で配列が定義されていた。配列 ...
-
-
PHPで複数の変数に同じ値を代入する方法(多重代入 / 一括代入 / 同時代入)
PHPのソースコード上に「$a = $b = $c = 12;」みたいな見たこと ...