【发布时间】:2012-02-15 17:25:35
【问题描述】:
在 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
【问题讨论】:
-
对于故障排除,您可以尝试使用 strace 来查看该特定进程在做什么:
strace -p PID