4

我在多个服务器上遇到问题,而不是使用 Apache 模块 mod_fcgid 提供处理请求(票证验证和类似处理)的 cgi 脚本,然后根据处理结果在服务器上提供文件。

我在日志中不断收到以下错误:

[Mon Jan 30 23:11:41 2012] [warn] [client 95.35.160.193] mod_fcgid: error reading data, FastCGI server closed connection

[Mon Jan 30 23:11:41 2012] [warn] [client 95.35.160.193] (32)Broken pipe: mod_fcgid: ap_pass_brigade failed in handle_request_ipc function

[Mon Jan 30 23:13:34 2012] [warn] [client 37.8.52.128] mod_fcgid: can't apply process slot for /var/www/cgi-bin/assetx.fcgi

这些问题会导致服务器变慢,有时会导致服务暂时不可用错误。

服务器上的流量很大,我目前配置了以下 fcgi 指令,如下所示:

FcgidMaxRequestsPerProcess       0
FcgidMaxProcesses       300
FcgidMinProcessesPerClass 0
FcgidIdleTimeout        240
FcgidIOTimeout  240
FcgidBusyTimeout 300

服务器上的平均负载正常,进程数平均为 250 个进程。

我对这个问题做了几天的研究,有人说这是一个权限问题,我听从了他们的建议,没有帮助。我尝试调整上面的参数,这些是我尝试过的最终值,但它们效果不佳。我也在尝试使用 nginx 代替 apache,但我找不到合适的方法来使用 nginx 在服务器上以这种高负载运行 cgi 脚本。

我能做些什么来解决这个问题?

4

1 回答 1

1

在 Apache 成功联系到它之前,你的应用程序已经死了。答案是找出应用程序死亡的原因。

FastCGI 进程应该永远不会死亡或退出,即使在错误情况下也是如此。Apache 希望 FastCGI 脚本继续存在。

你提到你有一个cgi脚本。你是如何修改它以支持 FastCGI 的?

通常您需要切换到 CGI::Fast 之类的东西,删除所有对 die 和 exit 的调用,并重构您的脚本以使用 CGI::Fast while 循环运行。

于 2013-02-22T13:34:02.557 回答