mod_fcgid + PHP + apache锁定

时间:2011-04-04 14:46:16

标签: php linux apache fastcgi

我正在使用运行mod_fcgid的PHP运行一个相当典型的LAMP堆栈。考虑到它接收的流量,我认为服务器处于“高负载”状态。

存在间歇性问题,Apache在访问依赖于PHP的站点时报告所有连接处于“发送内容”状态(监视器上的“W”)。

没有PHP错误可言,就好像在这些“锁定”期间实际上没有调用PHP。但是,在apache站点日志中,我看到以下内容:

(103)Software caused connection abort: mod_fcgid: ap_pass_brigade failed in handle_request function
[warn] mod_fcgid: can't apply process slot for /var/www/cgi-bin/php.fcgi

在此期间,我仍然可以访问不依赖于PHP的站点,例如apache状态和仅HTML虚拟主机(没有PHP处理程序包括)。

php.fcgi脚本设置了 PHP_FCGI_MAX_REQUESTS = 500 ,因为我已经读过在CGI模式下运行PHP的竞争条件问题。 fcgid.conf还设置了 MaxProcessCount = 15

是否还有其他人遇到此错误,如果有,又如何解决?

2 个答案:

答案 0 :(得分:2)

我自己设法解决了这个问题。

要解决此问题,请在FastCGI配置中添加更严格的检查以处理进程挂起,并缩短PHP实例的生命周期:

IPCConnectTimeout 20
ProcessLifeTime 120
IdleTimeout 60
IdleScanInterval 30
MaxRequestsPerProcess 499
MaxProcessCount 100

根据您的要求,这可以满足配置良好的服务器,每小时点击次数超过50k。

您会发现已记录的已解散/“僵尸”PHP进程数量显着增加。然而,这很好,因为之前的流程只会变得没有响应,FastCGI经理会继续向他们发送请求!

我还建议从php.fcgi脚本中删除所有覆盖指令,因为这可能会导致系统出现问题。尝试尽可能多地从Apache中的主要FastCGI配置进行管理。

答案 1 :(得分:0)

我们选择了Nginx + http://php-fpm.org/

尝试“strace -p”。

当一些PHP软件试图从运行它的同一台服务器请求文件时,我也看到了锁定(get_file_contents('http:// localhost ...'))