nginx
とPHP-FPM v5.3.3
を使用したセットアップで、nginxのエラーログに次のエラーが頻繁に発生していることに気付きました。
Feb 16 15:00:22 mymachine www.example.com 2015/02/16 15:00:20 [error] 20254#0:
*1448249 readv() failed (104: Connection reset by peer) while reading upstream
[...]
php-fpm.log
ファイルを見ると、次のことに気づきました。
[16-Feb-2015 15:00:20] NOTICE: [pool www] child 22279 exited with code 0 after
47983.681002 seconds from start
[16-Feb-2015 15:00:20] NOTICE: [pool www] child 10625 started
これは、pm.max_requests
構成ディレクティブが設定するワーカーのリサイクルです。
私は(合理的に)PHP-FPMがワーカーをリサイクルする前に、受け入れられた接続/要求を正しく処理すると想定しました。このタスクはいかなる種類の緊急事態も意味しないためです。
pm.max_requests
setは一般的な方法です。たぶんあなたはただ数人の労働者を走らせなければならないでしょう。ビジーで実行中のワーカーの数を実際に調査する必要があります。php-fpmにはこのための内部リソースがあります。pm.status_path
-wgetまたはその他のhttpクライアントで何が含まれているかを確認できます。
[root@sol etc]# wget -O - -q http://localhost/status
pool: www
process manager: dynamic
start time: 29/Jan/2015:11:36:20 +0300
start since: 1633615
accepted conn: 996160
listen queue: 0
max listen queue: 0
listen queue len: 0
idle processes: 34
active processes: 1
total processes: 35
max active processes: 18
max children reached: 0
slow requests: 0
1つのアクティブなプロセスと1つのアイドル状態があると表示されているので、問題ありません。ビジーなプロセスの数は最大で18でしたので、最初からずっと大丈夫でした。