Nginxが重い? NginxにおけるPHP-FPMの設定

Nginxを入れてサーバーを稼動させたんだけど、やたらサーバーが重いって思っていたら、なんと、TOPコマンドで見ると、PHP-FPMのプロセスが大量に発生していました。

1GB近く使用されていたんですが、一気に、下記のコマンドでメモリ使用量がへりました。

kill ps -ef | grep php-fpm | awk '{print $2;}'

スポンサーリンク

PHP-FPMの設定

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

で下記の部分をデフォルト値は100だが減らす

pm.max_children = 15

上記のpm.max_children の設定値の意味

pm = static の場合 → 作成される子プロセスの数 pm = dynamic の場合 → 作成される子プロセスの最大数

staticは固定値でメモリを保有するので処理速度は高いですが、 dynamicは低負荷の場合メモリ消費量が少ないので、他の処理にメモリを割り当てることでができます。つまり動的にメモリを自動的に制御できます。

 

変更した設定を読み込みます。 /etc/init.d/php-fpm reload

service nginx restart

そのほかphp-fpmの設定例

9000ポートで競って憂い

listen = 127.0.0.1:9000

ユーザーとグループの設定です。Nginxで動かしてたのでnginxで設定しています。

user = nginx group = nginx

プロセスマネージャが子プロセスの数を制御する方法

static

子プロセスの数は固定 (pm.max_children) です。

ondemand

プロセスを必要に応じて立ち上げます。 dynamic とは対照的に、リクエストされると pm.start_servers で指定しただけサービスを起動する。

dynamic

子プロセスの数は、 pm.max_children、pm.start_servers、 pm.min_spare_servers、pm.max_spare_servers の内容に基づいて動的に設定されます。

staticは固定値でメモリを保有するので処理は上がります。 dynamicは低負荷の場合メモリ消費量が少ないので他の処理にメモリを割り当てることでができます。 状況に応じて変更します。

*staticにしたところ、かなり処理速度は上がり、ロードアベレージが減りました。

pm = dynamic

作成される子プロセスの最大数

pm.max_children = 10

起動時に作成される子プロセスの数を設定します。(dynamicは必須)

pm.start_servers = 15

アイドル状態のサーバープロセス数の最小値。(dynamicは必須)

pm.min_spare_servers = 5

アイドル状態のサーバープロセス数の最大値。(dynamicは必須)

pm.max_spare_servers = 23

各子プロセスが、再起動するまでに実行するリクエスト数。 メモリリーク対策に使えます。

pm.max_requests = 512

まとめ

Nginxで軽くしたはずなのに、おかしいと感じたら、サーバーの処理を探ってみましょう。

意外な部分がボトルネックになっています。

設定ファイルのphp_admin_value[memory_limit] でメモリの利用制限をかけることができるようです。

スポンサーリンク

Leave a Reply