勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ。

PHP-FPMのプロセス設定を行いサーバのメモリ消費を抑える方法

  PHP

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)で各設定値も大きくは外れていないため恐らく大丈夫じゃないかと思われる。しばらくは様子見する。

 

参考サイト

https://thoames.hatenadiary.jp/entry/2020/05/12/073656

https://likealunatic.jp/2017/04/php-fpm

 - PHP

  関連記事

PHPで指定日から曜日を割り出す
PHPで指定日から曜日を割り出す

曜日ってどうやって割り出すの? となったのでメモ。 ■リファレンス http:/ ...

GoogleスプレッドシートとPHPを連携させデータを取得・追記する方法
GoogleスプレッドシートとPHPを連携させデータを取得・追記する方法

GoogleスプレッドシートとPHPプログラムを連携させたいという案件をたまに見 ...

ディレクトリに設置してあるフォルダをPHPで調べて表示
ディレクトリに設置してあるフォルダをPHPで調べて表示

やりたい事はsampleというディレクトリがあったとして、その直下にあるフォルダ ...

PHPで日付の比較
PHPで日付の比較

以前に「締切日を設けて、今日の日付と比較して分岐させる」というもので 日付の比較 ...

PHPで配列のキーの最大値を取得する方法
PHPで配列のキーの最大値を取得する方法

配列のキーに整数値が入っていて、その中から最大値を取得したいケースがあった。調べ ...