我在各种共享主机上的基于PHP / MySQL的站点上出现了随机500 Internal Server
错误。我在共享的Linux服务器上使用PHP 5.2.17到CGI / FastCGI。当我查看日志时,我看到了:
[error] [client 75.71.176.224] (104)Connection reset by peer: FastCGI: comm with server "/dev/shm/blackmou-php.fcgi" aborted: read failed, referer: ...
[error] [client 75.71.176.224] FastCGI: incomplete headers (0 bytes) received from server "/dev/shm/blackmou-php.fcgi", referer: ...
[error] [client 75.71.176.224] (104)Connection reset by peer: FastCGI: comm with server "/dev/shm/blackmou-php.fcgi" aborted: read failed, referer: ...
[error] [client 75.71.176.224] FastCGI: incomplete headers (0 bytes) received from server "/dev/shm/blackmou-php.fcgi", referer: ...
任何人都知道如何解决这个问题?
答案 0 :(得分:12)
此问题通常不仅仅是特定于主机,它也与开发人员相关,具体取决于配置。 但是有些主机对FastCGI非常严格,会限制你的能力。 在不使用FastCGI的情况下运行通常更容易,只需使用mod_php,除非您特别需要在应用程序中使用FastCGI。
我们需要看到你的fcgi包装器(在/dev/shm/blackmou-php.fcgi中有什么用)或.htaccess用于FastCGI产生,以便更好地帮助你而不知道哪些文件和这些文件上的代码是问题与...发生。 您的主机也使用Apache,LightHttpd或Nginx(或组合)吗? 那时我强烈建议更新以使用PHP 5.3.9 +
由于这可能是由许多问题引起的,因此FastCGI有效地防止您的站点/脚本受到拒绝服务攻击或因内存泄漏等而崩溃等。 (EG:试图通过删除和限制请求数量或通过超时和终止进程而陷入无限循环来处理80,000个连接)
此错误通常是由idle_timeout(默认为30秒)或max children进程限制引起的。 它也可能是由于某人在脚本完成之前启动了一个长时间运行的脚本并关闭了他们的浏览器/连接。
FastCGI启动其进程包装器,执行命令,在完成进程之前超时,连接被视为由对等方重置。
另一个例子是达到最大子项(maxProcesses)(EG:很多网站显示2或4作为示例,实际上根据平均流量可能需要20或50) 如果所有子节点当前都处于活动状态并且发出了其他请求/连接,则子节点限制为maxProcesses,FastCGI将不与其共享活动子节点,因此它必须首先终止进程并启动新的子进程,或者删除请求,具体取决于您的配置。
以下是有关设置的更多信息:
http://www.fastcgi.com/mod_fastcgi/docs/mod_fastcgi.html
http://www.fastcgi.com/drupal/node/10
包装示例
PHP_FCGI_CHILDREN=0 #no limit
export PHP_FCGI_CHILDREN
PHP_FCGI_MAX_REQUESTS=10000
export PHP_FCGI_MAX_REQUESTS
<强>更新强>
再加上这个,这也可以由php内存限制
引起如果上述问题无法解决您的问题,请更新您的php.ini以增加 memory_limit