mod_fcgid:读取数据超时错误

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 站点

  • 英特尔® 酷睿™ i7-2600 四核包括。超线程技术
  • 内存 16 GB DDR3 内存
  • 硬盘 2 x 3 TB SATA 6 Gb/s HDD 7200 rpm(软件-RAID 1)
  • NIC1 Gbit OnBoard 以 100 Mbit 连接

Seb*_*biF 5

这些错误意味着脚本运行时间超过 31 秒,因此它们被终止,正如您的 fcgid.conf 所说的那样。顺便说一句,标准超时是 40 秒。

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

<?php sleep(32); ?>
Run Code Online (Sandbox Code Playgroud)

这应该会给你一个错误 500 并将这个错误放在你的日志中。

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

  1. 重新制作 index.php(或后面的应用程序)并解决潜在的循环问题(脚本永远运行并在 31 秒后终止)。
  2. 将超时设置得更高。这必须为每个虚拟主机完成(不要忘记 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 以终止所有正在运行的进程,以便他们获得新的配置。