php – mod_fcgid:读取数据超时错误

我转移到使用fcgid的非托管服务器(在我使用mod_PHP之前),在错误日志中我看到了大量此类错误

[Mon Apr 23 21:17:12 2012] [warn] [client 66.249.68.233] mod_fcgid:
read data timeout in 31 seconds [Mon Apr 23 21:17:12 2012] [error]
[client 66.249.68.233] Premature end of script headers: index.PHP

[Mon Apr 23 17:59:51 2012] [warn] [client 74.117.180.58] mod_fcgid:
read data timeout in 31 seconds [Mon Apr 23 17:59:51 2012] [warn]
[client 74.117.180.58] (110)Connection timed out: mod_fcgid:
ap_pass_brigade Failed in handle_request_ipc function

在备份期间负载较高(2-3)时似乎有更多这些,并且我甚至设法在备份期间运行tar / mysqldump时在3的负载期间复制它(用户在看到500错误消息之后30秒).服务器可能会超载吗?
这个问题似乎与PHP + Fcgid hangs if download interrupted有关但不一样.

这是一个顶级的服务器,我很惊讶这将是太多了.以下是一些规格:
6-7使用Webmin的Drupal站点

>Intel®Core™i7-2600 Quadcore incl.超线程技术
> RAM 16 GB DDR3 RAM
>硬盘2 x 3 TB SATA 6 Gb / s HDD 7200 rpm(软件-RAID 1)
> NIC1 Gbit OnBoard以100 Mbit连接

这些错误意味着脚本的运行时间超过31秒,因此它们被终止,因为你的fcgid.conf是这样说的.标准超时是40秒btw.

您可以通过编写test.PHP轻松检查此行为:

<?PHP sleep(32); ?>

这应该会给您一个错误500并将此错误放在您的日志中.

您有两种可能性来解决这个问题:

>重新制作index.PHP(或后面的应用程序)并解决潜在的循环问题(脚本永远运行并在31秒后终止).
>设置更高的超时.必须为每个vhost执行此操作(不要忘记SSL!),因为此设置在每次加载另一个vhost时都会更改,并将一直保留到生成的进程终止.
最简单的方法是编辑/etc/apache2/mods-available/fcgid.conf.这就是我们正在使用的:

IdleTimeout 3600
ProcessLifeTime 7200
IPCConnectTimeout 8
IPCCommTimeout 600
BusyTimeout 300

编辑:哦,第二个错误与URL中过长的查询字符串有关.要允许更长的查询字符串,还要编辑fcgid.conf并插入

MaxRequestLen 15728640

不要忘记重新启动apache来杀死所有正在运行的进程,这样他们就可以获得新的配置.

相关文章

Hessian开源的远程通讯,采用二进制 RPC的协议,基于 HTTP 传输。可以实现PHP调用Java,Python,C#等多语...
初识Mongodb的一些总结,在Mac Os X下真实搭建mongodb环境,以及分享个Mongodb管理工具,学习期间一些总结...
边看边操作,这样才能记得牢,实践是检验真理的唯一标准.光看不练假把式,光练不看傻把式,边看边练真把式....
在php中,结果输出一共有两种方式:echo和print,下面将对两种方式做一个比较。 echo与print的区别: (...
在安装好wampServer后,一直没有使用phpMyAdmin,今天用了一下,phpMyAdmin显示错误:The mbstring exte...
变量是用于存储数据的容器,与代数相似,可以给变量赋予某个确定的值(例如:$x=3)或者是赋予其它的变...