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

前端之家收集整理的这篇文章主要介绍了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来杀死所有正在运行的进程,这样他们就可以获得新的配置.

猜你在找的PHP相关文章