在https://stackoverflow.com/a/12686252/219116之前已经提出并回答了这个问题,但是,那里的解决方案对我不起作用。
mod_fcgid config
<IfModule mod_fcgid.c>
AddHandler fcgid-script .fcgi
FcgidIPCDir /var/run/mod_fcgid/
FcgidProcessTableFile /var/run/mod_fcgid/fcgid_shm
FcgidIdleTimeout 60
FcgidProcessLifeTime 120
FcgidMaxRequestsPerProcess 500
FcgidMaxProcesses 150
FcgidMaxProcessesPerClass 144
FcgidMinProcessesPerClass 0
FcgidConnectTimeout 30
FcgidIOTimeout 600
FcgidIdleScanInterval 10
FcgidMaxRequestLen 269484032
</IfModule>
php-cgi脚本
#!/bin/bassh
export PHPRC=/var/www/vhosts/example.com/etc/
export PHP_FCGI_MAX_REQUESTS=5000
exec /usr/bin/php-cgi
系统详情
所以我的FcgidMaxRequestsPerProcess设置为500,我的PHP_FCGI_MAX_REQUESTS设置为10x,如前面的答案和Apache文档中所建议的那样。但我仍然遇到这些错误
[Thu Nov 19 18:16:48.197238 2015] [fcgid:warn] [pid 6468:tid 139726677858048]
(32)Broken pipe: [client X.X.X.X:41098] mod_fcgid: ap_pass_brigade failed in handle_request_ipc function
答案 0 :(得分:14)
我也在一年前遇到同样的问题然后我尝试了很多东西,最后我在文档阅读后完成了一些命中和运行的事情,我的问题就消失了。首先需要设置的重要事项为:
FcgidBusyTimeout 300 [default]
FcgidBusyScanInterval 120 [default]
此指令的目的是终止挂起的应用程序。对于可能需要更长时间来处理请求的应用程序,可能需要增加默认超时。由于检查是在FcgidBusyScanInterval
定义的时间间隔执行的,因此可以允许请求处理进行更长的时间
FcgidProcessLifeTime 3600 [default]
如果课程的处理次数超过FcgidMinProcessesPerClass
,则会终止已存在超过此时间的空闲申请流程。
此流程生命周期检查以配置的FcgidIdleScanInterval
的频率执行。
FcgidZombieScanInterval 3 [seconds default]
模块以此间隔检查退出的FastCGI应用程序。在这段时间内,应用程序可能作为僵尸存在于进程表中(在Unix上)。
注意:以上所有选项根据您的申请流程时间或需求减少或增加或适用于特定的虚拟主机。
上面的选项已经调整了我的服务器,但一段时间后错误似乎再次出现,但错误确实解决了这个问题:
FcgidOutputBufferSize 65536 [default]
我已将其更改为
FcgidOutputBufferSize 0
这是在将数据刷新到客户端之前,模块将从FastCGI应用程序读取的最大响应数据量。这将立即刷新数据,而不是等待64KB的字节,这真的有助于我更快地清除进程。
如果500错误来自Nginx超时。修复:
/etc/nginx/nginx.conf
keepalive_timeout 125;
proxy_read_timeout 125;
proxy_connect_timeout 125;
fastcgi_read_timeout 125;
间歇性地我会得到MySQL“MySQL服务器已经消失”的错误,这需要再调整一次: /etc/my.conf
wait_timeout = 120
然后,只是为了测试,我继续提高我的PHP内存限制,以防万一: /etc/php.ini中
memory_limit = 256M
mod_fastcgi
SuExec
下的Apache 2.x
下{p> Private Sub cir(ByVal x1 As Integer, ByVal y1 As Integer, ByVal r1 As Integer, ByVal r2 As Integer, ByVal c As Color)
Dim pic As Bitmap = New System.Drawing.Bitmap(1000, 1000)
Dim th As Double
Dim nx, ny As Integer
For th = 0 To 360 Step 0.5
nx = x1 + r1 * Cos(th * 22 / 7 / 180)
ny = x1 + r2 * Sin(th * 22 / 7 / 180)
pic.SetPixel(nx, ny, c)
PictureBox1.Image = pic
Next th
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
cir(100, 100, 50, 50, Color.Blue)
End Sub
根本不起作用。我只有麻烦(它在我们的测试中还有许多其他问题)。问题的真正原因是SuExec
在我的情况下,这是一个初创公司,我启动Apache,mod_fcgid为每个vhost产生了5个进程。现在,当使用简单的上载脚本并提交大于4-8KB的文件时,对于执行脚本的特定vhost,所有这些子进程都会被立即终止。
有可能在mod_fcgid中进行调试构建或启动日志记录,这可能会提供线索。
我在此期间尝试了mod_fastcgi 1年,我也可以和其他许多人说SuExec只是麻烦而且根本不会顺利运行。
答案 1 :(得分:4)
警告与任何git config --system --list
选项无关,只是由于客户端在服务器有机会响应之前关闭了他们的连接端。
从实际来源:
Fcgidxxx
归功于发现它的Avian's Blog。
答案 2 :(得分:0)
网站使用异步请求时,可能会发生此错误。这些不会直接显示为网页上的错误结果,但是会触发PHP脚本的执行。如果此类脚本在执行期间失败,并且未返回结果,则会记录此或类似的奇怪错误。您需要做的是识别对PHP脚本的JavaScript(AJAX)调用,并找出为什么这些脚本执行失败的原因。
在等待服务器响应之前关闭连接的客户端。客户端确实确实在关闭它,但它正在这样做,因为它没有收到来自AJAX调用的响应,而这又是由网站的脚本错误引起的。