<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[张宴的博客]]></title> 
<link>http://zyan.cc/index.php</link> 
<description><![CDATA[Web系统架构与底层研发]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[张宴的博客]]></copyright>
<item>
<link>http://zyan.cc/file_get_contents/</link>
<title><![CDATA[PHP-CGI 进程 CPU 100% 与 file_get_contents 函数的关系]]></title> 
<author>张宴 &lt;net@s135.com&gt;</author>
<category><![CDATA[Web服务器]]></category>
<pubDate>Fri, 05 Aug 2011 07:33:05 +0000</pubDate> 
<guid>http://zyan.cc/file_get_contents/</guid> 
<description>
<![CDATA[ 
	　　[文章作者：张宴 本文版本：v1.0 最后修改：2011.08.05 转载请注明原文链接：<a href="http://blog.zyan.cc/file_get_contents/" target="_blank">http://blog.zyan.cc/file_get_contents/</a>]<br/><br/>　　有时候，运行 Nginx、PHP-CGI(php-fpm) Web服务的 Linux 服务器，突然系统负载上升，使用 top 命令查看，很多 php-cgi 进程 CPU 使用率接近100%。后来，我通过跟踪发现，这类情况的出现，跟 PHP 的 file_get_contents() 函数有着密切的关系。<br/><br/>　　大、中型网站中，基于 HTTP 协议的 API 接口调用，是家常便饭。PHP 程序员们喜欢使用简单便捷的 file_get_contents("http://example.com/") 函数，来获取一个 URL 的返回内容，但是，如果 <a href="http://example.com/" target="_blank">http://example.com/</a> 这个网站响应缓慢，file_get_contents() 就会一直卡在那儿，不会超时。<br/><br/>　　我们知道，在 php.ini 中，有一个参数 max_execution_time 可以设置 PHP 脚本的最大执行时间，但是，在 php-cgi(php-fpm) 中，该参数不会起效。真正能够控制 PHP 脚本最大执行时间的是 php-fpm.conf 配置文件中的以下参数：<br/><textarea name="code" class="xml" rows="15" cols="100">The timeout (in seconds) for serving a 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></textarea>　　默认值为 0 秒，也就是说，PHP 脚本会一直执行下去。这样，当所有的 php-cgi 进程都卡在 file_get_contents() 函数时，这台 Nginx+PHP 的 WebServer 已经无法再处理新的 PHP 请求了，Nginx 将给用户返回“502 Bad Gateway”。修改该参数，设置一个 PHP 脚本最大执行时间是必要的，但是，治标不治本。例如改成 &lt;value name=&quot;request_terminate_timeout&quot;&gt;30s&lt;/value&gt;，如果发生 file_get_contents() 获取网页内容较慢的情况，这就意味着 150 个 php-cgi 进程，每秒钟只能处理 5 个请求，WebServer 同样很难避免“502 Bad Gateway”。<br/><br/>　　要做到彻底解决，只能让 PHP 程序员们改掉直接使用 file_get_contents("http://example.com/") 的习惯，而是稍微修改一下，加个超时时间，用以下方式来实现 HTTP GET 请求。要是觉得麻烦，可以自行将以下代码封装成一个函数。<br/><textarea name="code" class="php" rows="15" cols="100"><?php
$ctx = stream_context_create(array(
&nbsp;&nbsp; 'http' => array(
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'timeout' => 1 //设置一个超时时间，单位为秒
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )
&nbsp;&nbsp; )
);
file_get_contents("http://example.com/", 0, $ctx);
?></textarea>　　当然，导致 php-cgi 进程 CPU 100% 的原因不只有这一种，那么，怎么确定是 file_get_contents() 函数导致的呢？<br/><br/>　　首先，使用 top 命令查看 CPU 使用率较高的 php-cgi 进程。<br/><br/><div class="code">top - 10:34:18 up 724 days, 21:01,&nbsp;&nbsp;3 users,&nbsp;&nbsp;load average: 17.86, 11.16, 7.69<br/>Tasks: 561 total,&nbsp;&nbsp;15 running, 546 sleeping,&nbsp;&nbsp; 0 stopped,&nbsp;&nbsp; 0 zombie<br/>Cpu(s):&nbsp;&nbsp;5.9%us,&nbsp;&nbsp;4.2%sy,&nbsp;&nbsp;0.0%ni, 89.4%id,&nbsp;&nbsp;0.2%wa,&nbsp;&nbsp;0.0%hi,&nbsp;&nbsp;0.2%si,&nbsp;&nbsp;0.0%st<br/>Mem:&nbsp;&nbsp; 8100996k total,&nbsp;&nbsp;4320108k used,&nbsp;&nbsp;3780888k free,&nbsp;&nbsp; 772572k buffers<br/>Swap:&nbsp;&nbsp;8193108k total,&nbsp;&nbsp;&nbsp;&nbsp;50776k used,&nbsp;&nbsp;8142332k free,&nbsp;&nbsp; 412088k cached<br/><br/>&nbsp;&nbsp;PID USER&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PR&nbsp;&nbsp;NI&nbsp;&nbsp;VIRT&nbsp;&nbsp;RES&nbsp;&nbsp;SHR S %CPU %MEM&nbsp;&nbsp;&nbsp;&nbsp;TIME+&nbsp;&nbsp;COMMAND&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>10747 www&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 18&nbsp;&nbsp; 0&nbsp;&nbsp;360m&nbsp;&nbsp;22m&nbsp;&nbsp;12m R 100.6 0.3&nbsp;&nbsp;&nbsp;&nbsp;0:02.60 php-cgi&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>10709 www&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 16&nbsp;&nbsp; 0&nbsp;&nbsp;359m&nbsp;&nbsp;28m&nbsp;&nbsp;17m R 96.8&nbsp;&nbsp;0.4&nbsp;&nbsp;&nbsp;&nbsp;0:11.34 php-cgi&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>10745 www&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 18&nbsp;&nbsp; 0&nbsp;&nbsp;360m&nbsp;&nbsp;24m&nbsp;&nbsp;14m R 94.8&nbsp;&nbsp;0.3&nbsp;&nbsp;&nbsp;&nbsp;0:39.51 php-cgi&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>10707 www&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 18&nbsp;&nbsp; 0&nbsp;&nbsp;360m&nbsp;&nbsp;25m&nbsp;&nbsp;14m S 77.4&nbsp;&nbsp;0.3&nbsp;&nbsp;&nbsp;&nbsp;0:33.48 php-cgi&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>10782 www&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 20&nbsp;&nbsp; 0&nbsp;&nbsp;360m&nbsp;&nbsp;26m&nbsp;&nbsp;15m R 75.5&nbsp;&nbsp;0.3&nbsp;&nbsp;&nbsp;&nbsp;0:10.93 php-cgi&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>10708 www&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 25&nbsp;&nbsp; 0&nbsp;&nbsp;360m&nbsp;&nbsp;22m&nbsp;&nbsp;12m R 69.7&nbsp;&nbsp;0.3&nbsp;&nbsp;&nbsp;&nbsp;0:45.16 php-cgi&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>10683 www&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 25&nbsp;&nbsp; 0&nbsp;&nbsp;362m&nbsp;&nbsp;28m&nbsp;&nbsp;15m R 54.2&nbsp;&nbsp;0.4&nbsp;&nbsp;&nbsp;&nbsp;0:32.65 php-cgi&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>10711 www&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 25&nbsp;&nbsp; 0&nbsp;&nbsp;360m&nbsp;&nbsp;25m&nbsp;&nbsp;15m R 52.2&nbsp;&nbsp;0.3&nbsp;&nbsp;&nbsp;&nbsp;0:44.25 php-cgi&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>10688 www&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 25&nbsp;&nbsp; 0&nbsp;&nbsp;359m&nbsp;&nbsp;25m&nbsp;&nbsp;15m R 38.7&nbsp;&nbsp;0.3&nbsp;&nbsp;&nbsp;&nbsp;0:10.44 php-cgi&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>10719 www&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 25&nbsp;&nbsp; 0&nbsp;&nbsp;360m&nbsp;&nbsp;26m&nbsp;&nbsp;16m R&nbsp;&nbsp;7.7&nbsp;&nbsp;0.3&nbsp;&nbsp;&nbsp;&nbsp;0:40.59 php-cgi</div><br/>　　找其中一个 CPU 100% 的 php-cgi 进程的 PID，用以下命令跟踪一下：<br/><div style="border-left: 0px dashed #D6C094; margin: 5px; padding: 3px; margin-bottom:0px; border: 1px dashed #00a0c6; background-color: #ffffff;">strace -p 10747</div><br/>　　如果屏幕显示：<br/><div class="code">select(7, &#91;6&#93;, &#91;6&#93;, &#91;&#93;, &#123;15, 0&#125;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= 1 (out &#91;6&#93;, left &#123;15, 0&#125;)<br/>poll(&#91;&#123;fd=6, events=POLLIN&#125;&#93;, 1, 0)&nbsp;&nbsp;&nbsp;&nbsp; = 0 (Timeout)<br/>select(7, &#91;6&#93;, &#91;6&#93;, &#91;&#93;, &#123;15, 0&#125;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= 1 (out &#91;6&#93;, left &#123;15, 0&#125;)<br/>poll(&#91;&#123;fd=6, events=POLLIN&#125;&#93;, 1, 0)&nbsp;&nbsp;&nbsp;&nbsp; = 0 (Timeout)<br/>select(7, &#91;6&#93;, &#91;6&#93;, &#91;&#93;, &#123;15, 0&#125;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= 1 (out &#91;6&#93;, left &#123;15, 0&#125;)<br/>poll(&#91;&#123;fd=6, events=POLLIN&#125;&#93;, 1, 0)&nbsp;&nbsp;&nbsp;&nbsp; = 0 (Timeout)<br/>select(7, &#91;6&#93;, &#91;6&#93;, &#91;&#93;, &#123;15, 0&#125;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= 1 (out &#91;6&#93;, left &#123;15, 0&#125;)<br/>poll(&#91;&#123;fd=6, events=POLLIN&#125;&#93;, 1, 0)&nbsp;&nbsp;&nbsp;&nbsp; = 0 (Timeout)<br/>select(7, &#91;6&#93;, &#91;6&#93;, &#91;&#93;, &#123;15, 0&#125;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= 1 (out &#91;6&#93;, left &#123;15, 0&#125;)<br/>poll(&#91;&#123;fd=6, events=POLLIN&#125;&#93;, 1, 0)&nbsp;&nbsp;&nbsp;&nbsp; = 0 (Timeout)<br/>select(7, &#91;6&#93;, &#91;6&#93;, &#91;&#93;, &#123;15, 0&#125;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= 1 (out &#91;6&#93;, left &#123;15, 0&#125;)<br/>poll(&#91;&#123;fd=6, events=POLLIN&#125;&#93;, 1, 0)&nbsp;&nbsp;&nbsp;&nbsp; = 0 (Timeout)<br/>select(7, &#91;6&#93;, &#91;6&#93;, &#91;&#93;, &#123;15, 0&#125;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= 1 (out &#91;6&#93;, left &#123;15, 0&#125;)<br/>poll(&#91;&#123;fd=6, events=POLLIN&#125;&#93;, 1, 0)&nbsp;&nbsp;&nbsp;&nbsp; = 0 (Timeout)<br/>select(7, &#91;6&#93;, &#91;6&#93;, &#91;&#93;, &#123;15, 0&#125;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= 1 (out &#91;6&#93;, left &#123;15, 0&#125;)<br/>poll(&#91;&#123;fd=6, events=POLLIN&#125;&#93;, 1, 0)&nbsp;&nbsp;&nbsp;&nbsp; = 0 (Timeout)<br/>select(7, &#91;6&#93;, &#91;6&#93;, &#91;&#93;, &#123;15, 0&#125;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= 1 (out &#91;6&#93;, left &#123;15, 0&#125;)<br/>poll(&#91;&#123;fd=6, events=POLLIN&#125;&#93;, 1, 0)&nbsp;&nbsp;&nbsp;&nbsp; = 0 (Timeout)<br/>select(7, &#91;6&#93;, &#91;6&#93;, &#91;&#93;, &#123;15, 0&#125;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= 1 (out &#91;6&#93;, left &#123;15, 0&#125;)<br/>poll(&#91;&#123;fd=6, events=POLLIN&#125;&#93;, 1, 0)&nbsp;&nbsp;&nbsp;&nbsp; = 0 (Timeout)</div><br/>　　那么，就可以确定是 file_get_contents() 导致的问题了。<br/>Tags - <a href="http://zyan.cc/tags/nginx/" rel="tag">nginx</a> , <a href="http://zyan.cc/tags/php/" rel="tag">php</a> , <a href="http://zyan.cc/tags/file_get_contents/" rel="tag">file get contents</a> , <a href="http://zyan.cc/tags/max_execution_time/" rel="tag">max execution time</a> , <a href="http://zyan.cc/tags/request_terminate_timeout/" rel="tag">request terminate timeout</a>
]]>
</description>
</item><item>
<link>http://zyan.cc/file_get_contents/#blogcomment8871</link>
<title><![CDATA[[评论] PHP-CGI 进程 CPU 100% 与 file_get_contents 函数的关系]]></title> 
<author>苹果 &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Fri, 05 Aug 2011 07:46:54 +0000</pubDate> 
<guid>http://zyan.cc/file_get_contents/#blogcomment8871</guid> 
<description>
<![CDATA[ 
	跟踪进程。学会一招。
]]>
</description>
</item><item>
<link>http://zyan.cc/file_get_contents/#blogcomment8872</link>
<title><![CDATA[[评论] PHP-CGI 进程 CPU 100% 与 file_get_contents 函数的关系]]></title> 
<author>兽人 &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Fri, 05 Aug 2011 07:50:31 +0000</pubDate> 
<guid>http://zyan.cc/file_get_contents/#blogcomment8872</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item><item>
<link>http://zyan.cc/file_get_contents/#blogcomment8873</link>
<title><![CDATA[[评论] PHP-CGI 进程 CPU 100% 与 file_get_contents 函数的关系]]></title> 
<author>niu &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Fri, 05 Aug 2011 07:53:28 +0000</pubDate> 
<guid>http://zyan.cc/file_get_contents/#blogcomment8873</guid> 
<description>
<![CDATA[ 
	牛
]]>
</description>
</item><item>
<link>http://zyan.cc/file_get_contents/#blogcomment8874</link>
<title><![CDATA[[评论] PHP-CGI 进程 CPU 100% 与 file_get_contents 函数的关系]]></title> 
<author>懒人 &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Fri, 05 Aug 2011 08:50:08 +0000</pubDate> 
<guid>http://zyan.cc/file_get_contents/#blogcomment8874</guid> 
<description>
<![CDATA[ 
	晚上跟踪下进程看看到底是什么问题....
]]>
</description>
</item><item>
<link>http://zyan.cc/file_get_contents/#blogcomment8876</link>
<title><![CDATA[[评论] PHP-CGI 进程 CPU 100% 与 file_get_contents 函数的关系]]></title> 
<author>enjoy &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Fri, 05 Aug 2011 10:00:32 +0000</pubDate> 
<guid>http://zyan.cc/file_get_contents/#blogcomment8876</guid> 
<description>
<![CDATA[ 
	这个方法不错，比较通用。我这使用curl封装成函数来替代file_get_content。
]]>
</description>
</item><item>
<link>http://zyan.cc/file_get_contents/#blogcomment8877</link>
<title><![CDATA[[评论] PHP-CGI 进程 CPU 100% 与 file_get_contents 函数的关系]]></title> 
<author>Johnny &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Fri, 05 Aug 2011 12:25:14 +0000</pubDate> 
<guid>http://zyan.cc/file_get_contents/#blogcomment8877</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item><item>
<link>http://zyan.cc/file_get_contents/#blogcomment8878</link>
<title><![CDATA[[评论] PHP-CGI 进程 CPU 100% 与 file_get_contents 函数的关系]]></title> 
<author>Sudu &lt;sudu@sudu.us&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Fri, 05 Aug 2011 12:44:00 +0000</pubDate> 
<guid>http://zyan.cc/file_get_contents/#blogcomment8878</guid> 
<description>
<![CDATA[ 
	这一篇文章帮了大家一个大忙，看来以后这个配置也是nginx必须要注意的了。
]]>
</description>
</item><item>
<link>http://zyan.cc/file_get_contents/#blogcomment8880</link>
<title><![CDATA[[评论] PHP-CGI 进程 CPU 100% 与 file_get_contents 函数的关系]]></title> 
<author>渔夫 &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Fri, 05 Aug 2011 14:36:56 +0000</pubDate> 
<guid>http://zyan.cc/file_get_contents/#blogcomment8880</guid> 
<description>
<![CDATA[ 
	应该是配置php吧。 nginx又是躺着也中枪
]]>
</description>
</item><item>
<link>http://zyan.cc/file_get_contents/#blogcomment8882</link>
<title><![CDATA[[评论] PHP-CGI 进程 CPU 100% 与 file_get_contents 函数的关系]]></title> 
<author>tanjun &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Sat, 06 Aug 2011 00:02:00 +0000</pubDate> 
<guid>http://zyan.cc/file_get_contents/#blogcomment8882</guid> 
<description>
<![CDATA[ 
	阳,武昌,蔡甸,江夏,黄陂,咸宁会议度假村,农家乐, <a href="http://www.027djc.com" target="_blank">www.027djc.com</a>
]]>
</description>
</item><item>
<link>http://zyan.cc/file_get_contents/#blogcomment8883</link>
<title><![CDATA[[评论] PHP-CGI 进程 CPU 100% 与 file_get_contents 函数的关系]]></title> 
<author>weizi &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Sat, 06 Aug 2011 01:05:43 +0000</pubDate> 
<guid>http://zyan.cc/file_get_contents/#blogcomment8883</guid> 
<description>
<![CDATA[ 
	同学可否说明一下为何 看了strace 之后的结果就知道是 file_get_contents 导致的问题了，对这个不太明白，希望能解答一下， 3Q
]]>
</description>
</item><item>
<link>http://zyan.cc/file_get_contents/#blogcomment8886</link>
<title><![CDATA[[评论] PHP-CGI 进程 CPU 100% 与 file_get_contents 函数的关系]]></title> 
<author>andy &lt;luckyhanbin@gmail.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Sat, 06 Aug 2011 08:22:06 +0000</pubDate> 
<guid>http://zyan.cc/file_get_contents/#blogcomment8886</guid> 
<description>
<![CDATA[ 
	我之前也遇到过类似问题，当时脚本里也用的file_get_contents函数，起初没什么问题，后来因为服务器问题无法请求，才暴露出这个cpu的问题，而且还产生很多僵尸进程，当时就跟踪判断了下，发现可能是file_get_contents问题，果断换了curl，现在没有此类问题了
]]>
</description>
</item><item>
<link>http://zyan.cc/file_get_contents/#blogcomment8887</link>
<title><![CDATA[[评论] PHP-CGI 进程 CPU 100% 与 file_get_contents 函数的关系]]></title> 
<author>evil &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Sat, 06 Aug 2011 08:22:30 +0000</pubDate> 
<guid>http://zyan.cc/file_get_contents/#blogcomment8887</guid> 
<description>
<![CDATA[ 
	同上， 怎么看了strace&nbsp;&nbsp;的结果，就能判断出是 file_get_contents 呢
]]>
</description>
</item><item>
<link>http://zyan.cc/file_get_contents/#blogcomment8889</link>
<title><![CDATA[[评论] PHP-CGI 进程 CPU 100% 与 file_get_contents 函数的关系]]></title> 
<author>龙_2 &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Sat, 06 Aug 2011 14:10:14 +0000</pubDate> 
<guid>http://zyan.cc/file_get_contents/#blogcomment8889</guid> 
<description>
<![CDATA[ 
	当时为了防止出现奇怪的问题，用curl重写了一个_file_get_contents，然后用它替换了file_get_contents
]]>
</description>
</item><item>
<link>http://zyan.cc/file_get_contents/#blogcomment8894</link>
<title><![CDATA[[评论] PHP-CGI 进程 CPU 100% 与 file_get_contents 函数的关系]]></title> 
<author>McFog &lt;wxyuan90@gmail.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Sun, 07 Aug 2011 01:01:08 +0000</pubDate> 
<guid>http://zyan.cc/file_get_contents/#blogcomment8894</guid> 
<description>
<![CDATA[ 
	拉URL那么贵的操作，还是Cache一下的比较好吧另外同问那个结果怎么看出来是file_get_contents的
]]>
</description>
</item><item>
<link>http://zyan.cc/file_get_contents/#blogcomment8895</link>
<title><![CDATA[[评论] PHP-CGI 进程 CPU 100% 与 file_get_contents 函数的关系]]></title> 
<author>让爱飞 &lt;blog@sve.com.cn&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Sun, 07 Aug 2011 01:05:05 +0000</pubDate> 
<guid>http://zyan.cc/file_get_contents/#blogcomment8895</guid> 
<description>
<![CDATA[ 
	究竟是怎样 看了strace&nbsp;&nbsp;的结果，就能判断出是 file_get_contents 呢呀
]]>
</description>
</item>
</channel>
</rss>