注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

淘尽网 官方博客

淘尽网http://www.tao3w.com做最好的比价网站

 
 
 

日志

 
 
关于我

淘尽网 http://www.tao3w.com 做最好的比价网站,做最好的数据抓取专家。

网易考拉推荐
GACHA精选

curl -d "经过URL编码的文本消息" "http://host:port/?name=your_queue_name&opt=put&auth=mypass123"  

2012-02-26 11:48:28|  分类: LINUX |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
有时运行nginxphp-cgi服务的时候,突然系统负载上升,使用top命令查看,很多php-cgi进程的cpu使用率达到100%,后来发现与file_get_contents()函数使用方法有关系
基于http协议的api接口调用,可以通过file_get_contents(“www.baidu.com”)来获取一个url的返回内容,但是若www.baidu.com网站反映慢,file_get_contents函数就一直卡在那里并且不会超时!
php-ini中,max_execution_time参数可以设置php脚本的最大执行事件,但php-cgi中,该参数不会生效,真正控制php脚本最大执行时间是php-fpm.conf配置文件中的一下参数

The timeout (in seconds) for serving single request after which the worker process will be terminated  
Should be used when 'max_execution_time' ini option does not stop script execution for some reason  
'0s' means 'off'  
<value name="request_terminate_timeout">0s</value>  

默认值0秒,即php脚本一直运行下去。这样当所有php-cgi进程都卡在file_get_contents函数时,这台服务器不会再处理新的php请求,nginx会返回502 bad gateway 错误。当然修改该参数设置php脚本最大执行时间是必要的,但治标不治本,若做到彻底解决,只能通过代码重新实现file_get_contents

修改方式:
<?php  
$ctx stream_context_create(array(  
'http' => array(  
'timeout' => //设置一个超时时间,单位为秒  
 
 
);  
file_get_contents("http://example.com/", 0, $ctx);  
?>

当然导致php-cgi进程cpu 100%的原因不止一种,怎么知道是file_get_contents函数导致的呢?

找其中一个 CPU 100%  php-cgi 进程的 PID,用以下命令跟踪一下:
strace -p 10747
如果屏幕显示:

select(7, [6], [6], [], {15, 0})        = 1 (out [6], left {15, 0})
poll([{fd=6, events=POLLIN}], 1, 0)     = 0 (Timeout)
select(7, [6], [6], [], {15, 0})        = 1 (out [6], left {15, 0})
poll([{fd=6, events=POLLIN}], 1, 0)     = 0 (Timeout)
select(7, [6], [6], [], {15, 0})        = 1 (out [6], left {15, 0})
poll([{fd=6, events=POLLIN}], 1, 0)     = 0 (Timeout)
select(7, [6], [6], [], {15, 0})        = 1 (out [6], left {15, 0})
poll([{fd=6, events=POLLIN}], 1, 0)     = 0 (Timeout)

那么,就可以确定是 file_get_contents() 导致的问题了。
  评论这张
 
阅读(309)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017