我在多台服务器上遇到问题,而不是使用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脚本。
我该怎么做才能解决这个问题?
答案 0 :(得分:1)
在Apache成功联系之前,你的应用程序正在消亡。答案是找出应用程序死亡的原因。
即使在错误情况下,FastCGI进程也不应该死或退出。 Apache希望FastCGI脚本能够继续存在。
你提到你有一个cgi脚本。你是如何修改它以支持FastCGI的?
通常你需要切换到类似CGI :: Fast的东西,删除所有对die的调用并退出,并重构你的脚本以使用CGI :: Fast while循环运行。