<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>http://jackxiang.com/post//</link>
<title><![CDATA[Nginx充分利用多核CPU提升性能_配置参数worker_cpu_affinity及PHP对多核心的利用之充分利用多核CPU，加速你的PHP应用（非web）]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[WEB2.0]]></category>
<pubDate>Tue, 13 Dec 2011 05:33:06 +0000</pubDate> 
<guid>http://jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	我的4核心开8个进程：<br/><textarea name="code" class="C" rows="15" cols="100">
worker_processes&nbsp;&nbsp;&nbsp;&nbsp; 8;
worker_cpu_affinity 0001 0010 0100 1000 0001 0010 0100 1000;
</textarea><br/>[root@jackxiang conf]# ps aux&#124;grep nginx<br/>root&nbsp;&nbsp;&nbsp;&nbsp; 30054&nbsp;&nbsp;0.1&nbsp;&nbsp;0.0 308184&nbsp;&nbsp;1740 ?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ss&nbsp;&nbsp; 20:44&nbsp;&nbsp; 0:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf<br/>www&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;30060&nbsp;&nbsp;3.6&nbsp;&nbsp;0.3 329396 23208 ?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;S&nbsp;&nbsp;&nbsp;&nbsp;20:44&nbsp;&nbsp; 0:00 nginx: worker process&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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/>www&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;30062&nbsp;&nbsp;3.5&nbsp;&nbsp;0.3 329396 23208 ?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;S&nbsp;&nbsp;&nbsp;&nbsp;20:44&nbsp;&nbsp; 0:00 nginx: worker process&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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/>www&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;30063&nbsp;&nbsp;4.1&nbsp;&nbsp;0.3 329396 23208 ?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;S&nbsp;&nbsp;&nbsp;&nbsp;20:44&nbsp;&nbsp; 0:00 nginx: worker process&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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/>www&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;30064&nbsp;&nbsp;3.8&nbsp;&nbsp;0.3 329396 23208 ?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;S&nbsp;&nbsp;&nbsp;&nbsp;20:44&nbsp;&nbsp; 0:00 nginx: worker process&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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/>www&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;30065&nbsp;&nbsp;3.8&nbsp;&nbsp;0.3 329396 23208 ?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;S&nbsp;&nbsp;&nbsp;&nbsp;20:44&nbsp;&nbsp; 0:00 nginx: worker process&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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/>www&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;30066&nbsp;&nbsp;3.5&nbsp;&nbsp;0.3 329396 23208 ?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;S&nbsp;&nbsp;&nbsp;&nbsp;20:44&nbsp;&nbsp; 0:00 nginx: worker process&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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/>www&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;30067&nbsp;&nbsp;4.6&nbsp;&nbsp;0.4 329396 24180 ?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;S&nbsp;&nbsp;&nbsp;&nbsp;20:44&nbsp;&nbsp; 0:00 nginx: worker process&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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/>www&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;30068&nbsp;&nbsp;4.1&nbsp;&nbsp;0.3 329396 23208 ?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;S&nbsp;&nbsp;&nbsp;&nbsp;20:44&nbsp;&nbsp; 0:00 nginx: worker process <br/>2核是 01，四核是0001，8核是00000001，有多少个核，就有几位数，1表示该内核开启，0表示该内核关闭。<br/>worker_processes最多开启8个，8个以上性能提升不会再提升了，而且稳定性变得更低，所以8个进程够用了。<br/>——————————————————————————————————————————————————————————————————————————<br/>我的双核cpu开两个进程，为<br/><br/>worker_processes&nbsp;&nbsp;&nbsp;&nbsp; 2;&nbsp;&nbsp;<br/>worker_cpu_affinity 01 10;&nbsp;&nbsp;<br/><br/>若要2核CPU开4进程，那么可以写为：<br/>worker_processes&nbsp;&nbsp;&nbsp;&nbsp; 4;&nbsp;&nbsp;<br/>worker_cpu_affinity 01 10 01 10; <br/>——————————————————————————————————————————————————————————————————————————<br/>Nginx默认没有开启利用多核CPU,我们可以通过增加worker_cpu_affinity配置参数来充分利用多核CPU。CPU是任务处理，计算最关键的资源，CPU核越多，性能就越好。<br/>下面直接上示例<br/>1. 2核CPU，开启2个进程<br/>worker_processes&nbsp;&nbsp;&nbsp;&nbsp; 2;<br/>worker_cpu_affinity 01 10;<br/>01表示启用第一个CPU内核，10表示启用第二个CPU内核<br/>worker_cpu_affinity 01 10;表示开启两个进程，第一个进程对应着第一个CPU内核，第二个进程对应着第二个CPU内核。<br/>2. 2核CPU,开启4个进程<br/>worker_processes&nbsp;&nbsp;&nbsp;&nbsp; 4;<br/>worker_cpu_affinity 01 10 01 10;<br/>开启了四个进程，它们分别对应着开启2个CPU内核<br/>3. 4核CPU，开户4个进程<br/>worker_processes&nbsp;&nbsp;&nbsp;&nbsp; 4;<br/>worker_cpu_affinity 0001 0010 0100 1000;<br/>0001表示启用第一个CPU内核，0010表示启用第二个CPU内核，依此类推<br/>4. 4核CPU，开启2个进程<br/>worker_processes&nbsp;&nbsp;&nbsp;&nbsp; 2;<br/>worker_cpu_affinity 0101 1010;<br/>0101表示开启第一个和第三个内核，1010表示开启第二个和第四个内核<br/>2个进程对应着四个内核<br/>worker_cpu_affinity配置是写在/etc/nginx/nginx.conf里面的。<br/>2核是 01，四核是0001，8核是00000001，有多少个核，就有几位数，1表示该内核开启，0表示该内核关闭。<br/>worker_processes最多开启8个，8个以上性能提升不会再提升了，而且稳定性变得更低，所以8个进程够用了。<br/>配置完毕后，重启nginx ，执行/etc/init.d/nginx restart<br/>测试nginx是否有用到多个CPU内核 ，在另一台机器上执行ab.exe -c 1000 -n 1000 http://www.domain.com/index.php<br/>ab.exe是装apache后带的一个性能测试工具，它可以模拟多客户端的并发请求。<br/>在服务器上执行top，然后按1，就可以看到CPU内核的工作情况。如果多个CPU内核的利用率都相差不多，证明nginx己经成功的利用了多核CPU。<br/>测试结束后，CPU内核的负载应该都同时降低。<br/><br/>==========================================================================<br/>现在大概已经很难找到单核心的服务器了吧，就连大多数近现代PC也都有了2个以上的CPU核心。<br/><br/>由于工作需要，常常要运行一些大数据量和大运算量的PHP脚本。在这种情况下，充分利用多核心的运算能力就显得非常有意义。<br/><br/>需要说明的是，下面的方法对于PHP的web应用并不适用，因为web方式运行的时候依赖于web服务器的工作模式。或许独立进程的cgi/fcgi是可以用的，但一般常见的php_mod形式是不适用的。<br/><br/>下面是两个脚本：task.php模拟一个需要长期执行的任务，run.php则是对task.php的启动和调度管理<br/><br/>task.php<br/><br/>&lt;?php<br/><br/>$s = $argv[1];<br/><br/>while(1) &#123;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;sleep(3);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;echo &quot;$s &quot; . time() . &quot; &#92;n&quot;;<br/><br/>&#125;<br/><br/>run.php<br/><br/>&lt;?php<br/>for($i=0;$i&lt;4;$i++) popen(&quot;nohup taskset -c $i php task.php $i 2&gt;&amp;1 &gt;&gt; /tmp/mcpu.log &amp;&quot;,&#039;r&#039;);<br/>运行run.php，检查一下是否符合我们的期望<br/><br/>alix@alix-laptop:~$ ps -eo pid,args,psr &#124; grep ph[p]<br/><br/> 6771 php task.php 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<br/><br/> 6773 php task.php 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1<br/><br/> 6775 php task.php 2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2<br/><br/> 6777 php task.php 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3<br/><br/>看起来是对的，4个进程分别运行在4个核心上了。<br/><br/>需要你自己研究的问题：<br/>1. taskset是什么？有没有php的函数可以做到同样的事情？<br/>2. 为什么是popen而不是反引号或exec等函数，如果需要双向的管道应该怎么办？<br/>3. 多核心并行运算有什么需要在开发时特别注意的？<br/><br/>4. 多进程之间如何互相通讯？如何划分任务来做到并行？<br/><br/>来源：http://blog.netroby.com/article-3523.html<br/>http://hi.baidu.com/aolaii/blog/item/e906fbf2d7eadc01b17ec537.html
]]>
</description>
</item><item>
<link>http://jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] Nginx充分利用多核CPU提升性能_配置参数worker_cpu_affinity及PHP对多核心的利用之充分利用多核CPU，加速你的PHP应用（非web）]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>