Loading...

    AD: 猛买网,精彩团购 | Jobsdigg | 很棒的男装店 | 网站地图

fastcgi中”idle timeout”的处理

可任意转载,但必须在醒目位置以超链接形式标明文章原始出处和作者信息
原文地址:http://www.blogkid.net/archives/1526.html

最近我的blog频繁地遇到500错误,同在这服务器的几个导航站也遇到这问题。服务器上跑php用的是apache+fastcgi,到错误日志里看了看,发现是这样的:

FastCGI: comm with server “D:/AppServ/php5/php-cgi.exe” aborted: idle timeout (30 sec)
FastCGI: incomplete headers (0 bytes) received from server “D:/AppServ/php5/php-cgi.exe”

比较重要的是这里的“idle timeout”,等待已超时。这里的意思是fastcgi进程等待了30秒,依然没能从php解释器那里获得内容,所以反映在外面就是个500错误。

出现这个的原因往往是由于程序中有不少耗时的操作(比如不小心写了个死循环)——联想到我刚刚启用了一个WP插件@Feed,就去服务器上把这个插件的文件夹改了个名字,马上blog就恢复了。我使用自动升级的功能升级了一下@Feed插件,再次启用,就可以正常工作了。看来可能是以前的插件不能用于这个新版本的WP。

有人说,我在程序里使用“set_time_limit(0)”,可以让该脚本永远不超时,为啥还是出500呢?其实这里是两个概念。Fastcgi为啥叫fastcgi,它不能容忍进程长期不响应的处理。理想的fastcgi应该是一秒可以处理数十个操作(虽然是挨个处理,但看起来就像是并发的)。set_time_limit(0)只能告诉php解释器这段脚本可以永不超时地执行,但在fastcgi还是有30秒的限制,所以还会报错。

如果真的要进行大量耗时的操作,还是考虑一下使用命令行的PHP吧。

0 Responses to “fastcgi中”idle timeout”的处理”


  1. No Comments

Leave a Reply