gio*_*o79 5 php timeout mod-fcgid
我搬到了一个使用 fcgid 的非托管服务器(在我使用 mod_php 之前),并且在错误日志中我看到了大量这样的错误:
[Mon Apr 23 21:17:12 2012] [warn] [client 66.249.68.233] mod_fcgid:读取数据超时 31 秒 [Mon Apr 23 21:17:12 2012] [error] [client 66.249.68.233] 提前结束。脚本头:index.php
[Mon Apr 23 17:59:51 2012] [warn] [client 74.117.180.58] mod_fcgid:在 31 秒内读取数据超时 [Mon Apr 23 17:59:51 2012] [warn] [client 74.117.180.58] (1810.180.51) ) 连接超时:mod_fcgid: ap_pass_brigade 在 handle_request_ipc 函数中失败
当备份期间负载较高 (2-3) 时,似乎有更多这些,当 tar / mysqldump 在备份期间运行时,我什至设法在 3 负载期间复制了这个(用户在之后看到 500 错误消息) 30秒)。服务器会不会过载?如果下载中断但不一样,这个问题似乎与PHP + Fcgid 挂起有关。
这是一流的服务器,我很惊讶这太多了。以下是一些规范: 6-7 个带有 Webmin 的 Drupal 站点
这些错误意味着脚本运行时间超过 31 秒,因此它们被终止,正如您的 fcgid.conf 所说的那样。顺便说一句,标准超时是 40 秒。
您可以通过编写 test.php 轻松检查此行为:
<?php sleep(32); ?>
Run Code Online (Sandbox Code Playgroud)
这应该会给你一个错误 500 并将这个错误放在你的日志中。
你有两种可能来解决这个问题:
将超时设置得更高。这必须为每个虚拟主机完成(不要忘记 SSL!),因为每次加载另一个虚拟主机时都会更改此设置,并且会一直保持到生成的进程终止。
最简单的方法是编辑/etc/apache2/mods-available/fcgid.conf. 这是我们正在使用的:
IdleTimeout 3600
ProcessLifeTime 7200
IPCConnectTimeout 8
IPCCommTimeout 600
BusyTimeout 300
编辑:哦,第二个错误与 URL 中过长的查询字符串有关。要允许更长的查询字符串,还可以编辑fcgid.conf和插入
MaxRequestLen 15728640
Run Code Online (Sandbox Code Playgroud)
不要忘记重新启动 apache 以终止所有正在运行的进程,以便他们获得新的配置。