cpu进程忽高忽低的解决办法
[文章作者:张宴本文版本:v1.0最后修改:2011.08.05转载请注明原文链接:http://blog.s135.com/file_get_contents/]
有时候,运行nginx、php-cgi(php-fpm)web服务的linux服务器,突然系统负载上升,使用top命令查看,很多php-cgi进程cpu使用率接近100%。后来,我通过跟踪发现,这类情况的出现,跟php的file_get_contents函数有着密切的关系。
大、中型网站中,基于http协议的api接口调用,是家常便饭。php程序员们喜欢使用简单便捷的file_get_contents("http://example.com/")函数,来获取一个url的返回内容,但是,如果http://example.com/这个网站响应缓慢,file_get_contents就会一直卡在那儿,不会超时。
我们知道,在php.ini中,有一个参数max_execution_time可以设置php脚本的最大执行时间,但是,在php-cgi(php-fpm)中,该参数不会起效。真正能够控制php脚本最大执行时间的是php-fpm.conf配置文件中的以下参数:
viewplainprint。
1.thetimeout(inseconds)forservingasinglerequestafterwhichtheworkerprocesswillbeterminated
2.shouldbeusedwhen'max_execution_time'inioptiondoesnotstopscriptexecutionforsomereason3.'0s'means'off'
4.0s
默认值为0秒,也就是说,php脚本会一直执行下去。这样,当所有的php-cgi进程都卡在file_get_contents函数时,这台nginx+php的webserver已经无法再处理新的php请求了,nginx将给用户返回“502badgateway”。修改该参数,设置一个php脚本最大执行时间是必要的,但是,治标不治本。例如改成30s,如果发生
(未完,全文共3007字,当前显示914字)
(请认真阅读下面的提示信息)