php-fpm ログ ファイルには、次のような内容が表示されるはずです。
WARNING: [pool www-images] server reached pm.max_children setting (5), consider raising it.
アクティブなプロセスの数が制限に達したとき。それを、入ってくるリクエストと関連付けることができるはずです。
問題の原因となっているリクエストのパターンが表示されない場合は、php-fpm 構成にスロー ロギングを追加する必要があります。
request_slowlog_timeout = 10
slowlog = /var/log/php-fpm/slow.$pool.log
は、slowlog_timeout の制限を超えるリクエストごとにスタック トレースをログに記録します。
それでも何も表示されない場合は、内部アプリケーションのログにスローダウンが発生した場所が表示されるはずです。
それでも十分な詳細がない場合は、最後の手段としてstraceを使用できます。これにより、どのシステム コールが行われているかが表示されます。それは情報の奔流を生み出すでしょう。strace -p PID
PID が php-fpm インスタンスのプロセス ID である単一のプロセスにのみアタッチすることをお勧めします。
また、その日のトラフィック数が最も少ない場合にも発生する可能性があります。
これは、php-fpm のスロー ログに確実に表示されるはずです。ただし、どのリクエストが遅いかを示しているだけで、その理由を理解するのに役立たない場合は、PHP-FPM 構成ファイルで auto pre および post-pend ファイルを使用してデバッグを追加できます。
php_value[auto_prepend_file]=/php_shared/prepend.php
php_value[auto_append_file]=/php_shared/postpend.php
または本当に単純に
PHP-FPM ステータス ページを設定できます。
これを PHP-FPM プール構成に追加します。
pm.status_path = /www-status
そしてリクエストをnginx経由でPHP-FPMに渡します
location ~ ^/(www-status)$ {
include %mysite.root.directory%/conf/fastcgi.conf;
fastcgi_pass unix:%phpfpm.socket%/php-fpm-www.sock;
# or IP address
# fastcgi_pass 127.0.0.1:9000;
#If you're fastcgi.conf doesn't set the query_string
#pass the query string here instead.
# fastcgi_param QUERY_STRING $query_string;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
allow 127.0.0.1;
allow stats_collector.localdomain;
allow watchdog.localdomain;
deny all;
}
次に、yoursite.com/www-status?full にアクセスすると、次のようなすべての php-fpm プロセスが大きく表示されます。
pool: www
process manager: dynamic
start time: 18/Mar/2013:20:17:21 +1100
start since: 243
accepted conn: 3
listen queue: 0
max listen queue: 0
listen queue len: 0
idle processes: 3
active processes: 1
total processes: 4
max active processes: 1
max children reached: 0
slow requests: 0
************************
pid: 6233
state: Idle
start time: 18/Mar/2013:20:17:21 +1100
start since: 243
requests: 1
request duration: 631
request method: GET
request URI: /www-status
content length: 0
user: -
script: /documents/projects/intahwebz/intahwebz/basereality/www-status
last request cpu: 0.00
last request memory: 262144
ところで、データベースをロックしているばかげたクエリに賭けます。