私は、チェロキー1.2.101のFastCGIでArchlinux/php-fpm 5.3.9を実行しているサーバで断続的な問題が発生しています。私のようなロジックを使用して、静的キャッシュファイルを構築し、提供キャッシュプラグインを使用しています:CPUのスパイクを引き起こすPHP-FPM/FastCGI + exit()
$cache_file = md5($host . $uri) . '.cache';
if(file_exists($cache_file)) {
$cache_file_contents = file_get_contents($cache_file)
exit($cache_file_contents);
}
// else build/save the $cache_file
いくつかのプロセスがそのexit()
呼び出しでのphp-FPMハングのスローログになってしまいます。その時点で、負荷スパイクは、CPU使用率100%がウェブサーバに(ほぼ)行き、PHPページは500 - 内部サーバエラーを返すようになります。時にはサーバーが自分自身で回復し、他の人はphp-fpmとcherokeeを再起動する必要があります。
私はPHP-FPM用のFastCGIの設定は、これは私が暫定的にキャッシュファイルが既にロードされなければならないとしてIOがファイルシステム上で待って排除しますVPSであっても
を行うように設定しています。私は500から
pm.max_requests
セットを持っていますが、exit()
呼び出しはプロセスの循環を妨害しているかどうか疑問vmstat
をテストするための行為でそれをキャッチすることができていません。
php-fpmログには、多くの
WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers)
が表示されます。これは、プール内の子プロセスの数を規定するphp-fpmの通常の部分のようです。
トラブルシューティングに関するヒントは、評価されます。これは、サーバーへの上に出力を渡すことに関係している可能性がある
http://www.php.net/manual/en/function.exit.php#96930
https://serverfault.com/questions/84962/php-via-fastcgi-terminated-by-calling-exit#85008
Errors when calling exit() function for fastCGI?
トラブルシューティングのために、straceを使って特定のプロセスが何をしているのかを調べることができます: 'strace -p PID' – Marki555