PHP-FPM - server reached pm.max_children - Warningエラー対処法
当ページのリンクには広告が含まれています。
スポンサーリンク
nginx + php-fpm で運用しているサーバーが「server reached pm.max_children」というWarningエラーを吐いていたので、その対処方法を紹介します。
PHP-FPMについてはこちらを参考にしてください。
» PHP-FPMのインストールと設定
Warningエラーの詳細です。
# less /var/log/php-fpm/error.log | grep pm.max_children [27-Aug-2013 16:02:37] WARNING: [pool www] server reached pm.max_children setting (50), consider raising it [27-Aug-2013 16:04:22] WARNING: [pool www] server reached pm.max_children setting (50), consider raising it [27-Aug-2013 17:00:51] WARNING: [pool www] server reached pm.max_children setting (50), consider raising it [27-Aug-2013 17:31:30] WARNING: [pool www] server reached pm.max_children setting (50), consider raising it [27-Aug-2013 17:33:18] WARNING: [pool www] server reached pm.max_children setting (50), consider raising it
そんなに頻度が高いわけではないですが、エラーを吐いているときにブラウザでWebサーバー(nginx)へアクセスするとタイムアウトする場合があります……。これは、Warningエラーに表示されているようにプロセスマネジャー(pm)の子プロセスの数が最大値(max、ここでは50)に達していることが原因です。
というわけで、子プロセスの最大数(pm.max_children)を増やしてあげましょう。
pm.max_children とは
pm = static の場合 → 作成される子プロセスの数 pm = dynamic の場合 → 作成される子プロセスの最大数
エラー対処方法
PHP-FPMの設定ファイル(/etc/php-fpm.d/www.conf)を編集します。
pm = dynamic
pm.max_children = 100 ← 子プロセスの最大数を50から100に増やしました
編集前(.old)と編集後をdiffコマンドで比較すると、以下のようになります。
# diff /etc/php-fpm.d/www.conf.old /etc/php-fpm.d/www.conf 73c73 < pm.max_children = 50 --- > pm.max_children = 100
以下のコマンドを実行し、変更した設定を反映します。
# /etc/init.d/php-fpm reload