在 Cherokee 1.2.101 的 FastCGI 中运行 Archlinux / php-fpm 5.3.9 的某些服务器上,我遇到了间歇性问题。我正在使用一个缓存插件,它使用如下逻辑构建和提供静态缓存文件:
$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 的缓慢日志中结束。那时负载达到峰值,100% 的 CPU 使用率(几乎)完全流向网络服务器,PHP 页面开始返回 500 - Internal Server 错误。有时服务器会自行恢复,其他的我需要重新启动 php-fpm 和 cherokee。
我将 PHP-FPM 的 FastCGI 设置配置为执行
即使这是一个 VPS,我也会暂时排除文件系统上的 IO 等待,因为应该已经加载了缓存文件。我无法在测试中抓住它
vmstat
我已
pm.max_requests
设置为 500,但想知道exit()
调用是否干扰了进程的循环。php-fpm 日志显示了很多
WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers)
. 这似乎是 php-fpm 调节池中子进程数量的正常部分
任何有关故障排除的提示将不胜感激。以下是我发现引发了一些危险信号的 3 件事:
http://www.php.net/manual/en/function.exit.php#96930
https://serverfault.com/questions/84962/php-via-fastcgi-terminated-by-calling-exit#85008