<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>https://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>https://jackxiang.com/post//</link>
<title><![CDATA[ [转]【swoole4.0】一次qps提升之旅(一)]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[Swoole专题研究]]></category>
<pubDate>Tue, 09 Apr 2019 02:21:47 +0000</pubDate> 
<guid>https://jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	背景：PHP在跨版本升级时一些扩展没跟上，跨的步子不是小而是不够大，跟不上的问题只好swoole来帮其迈步大一些，但是毕竟相关配套还是没有来得及跟上，有观望的，有踟蹰不前的，有换Go的，总之，这个过程是艰难，王导的这篇文章就是一个对swoole的性能再次作优化的一个不错的分享,君子身非异也，善假于物也，说白了就是工具配套很重要的，希望周边的扩展能跟上，特转之。<br/><br/>源起<br/>最近基于swoole的一个mvc开发框架做了一个项目，完成之后对其中一个接口例行做了一次压测，本机上得到qps是3600，由于接口功能比较简单，所以又花了点时间用beego和spring boot实现了相同的功能，也压测了一下，最终对比如下：<br/><br/>swoole:&nbsp;&nbsp;3600qps<br/>beego:&nbsp;&nbsp; 2200 qps<br/>spring:&nbsp;&nbsp; 600qps<br/><br/>（ps: 无意比较优劣，应该是用beego和spring boot的姿势不对）<br/><br/>swoole的结果符合预期，后来经过一翻折腾(加了一些逻辑，完善了一些底层框架代码)，再一压这个接口，qps下降到了2300<br/><br/>真是一顿操作猛如虎，性能下降35%啊<br/><br/>优化<br/>做为一个有追求的phper，这是不能忍的，必需找到原因并解决之，但光喊口号是不行的，必需有方法，一般我们会通过几种方式分析：<br/>日志法：通过各种日志，查看耗时，找出相应的问题，但这种方法有几个缺点：<br/>粒度太粗，不好控制<br/>侵入性太强，需要人工打点<br/>性能指标不够，只能分析出大致的耗时，但不能分区i/o, cpu时间乖<br/>xdebug：是我认为目前最牛逼的性能分析工具，可以无侵入式的详细的记录完整的调用链，唯一的遗憾是与swoole不兼容<br/>xhprof: facebook出口的一款性能分析工具，简单易用，问题是：后期不维护了，对现在的php版本以及swoole支持度都不好<br/>第三方的apm工具: 不可控，也不如前面2位，对swoole支持也不好<br/>除了打日志，好像在swoole下陷入的僵局了，一翻寻觅，发现了一个网站：https://tideways.com/，维护并持续更新xhprof，使之能支持php7，又一翻折腾，发现也支持在swoole下跑<br/><br/>安装 tideways_xhprof<br/><br/>github: https://github.com/shenzhe/php-xhprof-extension<br/>clone代码到本地<br/>执行：<br/> phpize<br/> ./configure<br/> make<br/> make install<br/><br/>标准的安装过程，产生tideways_xhprof.so，加入到php.ini中<br/><br/>判断有没有安装成功：<br/>php -m &#124;grep xhprof<br/>输出<br/>tideways_xhprof, 表示安装成功<br/><br/>使用 tideways_xhprof<br/>也比较简单<br/>在onRequest回调最开始一行输入：<br/>tideways_xhprof_enable(TIDEWAYS_XHPROF_FLAGS_MEMORY<br/>&nbsp;&nbsp;&#124; TIDEWAYS_XHPROF_FLAGS_CPU);<br/>表示开启分析，<br/><br/>中间执行你的业务逻辑<br/><br/>在最后一行输入<br/>file_put_contents(<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#039;/tmp/xhprof/&#039; . uniqid() . &#039;.msg-api.xhprof&#039;,<br/>&nbsp;&nbsp;&nbsp;&nbsp;serialize(tideways_xhprof_disable())<br/>);<br/>把分析的结果存入到文件中，以待分析<br/>其中：<br/>&#039;/tmp/xhprof/&#039; . uniqid() . &#039;.msg-api.xhprof&#039;<br/>是最终分析文件的地址，可自行修改<br/><br/>然后执行你的接口，最后会在 /tmp/xhprof 文件夹下看到如下的文件：<br/><a href="https://mmbiz.qpic.cn/mmbiz_png/LHDiahSVnXhv7RIhE32icGiaCnx7uBicR84LiaMb7fknqq9u3AD17icvY2ru9j20UndbciaLpLAicX2VYR94EqrPQ3UsXA/640?wx_fmt=png&amp;tp=webp&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" target="_blank"><img src="https://mmbiz.qpic.cn/mmbiz_png/LHDiahSVnXhv7RIhE32icGiaCnx7uBicR84LiaMb7fknqq9u3AD17icvY2ru9j20UndbciaLpLAicX2VYR94EqrPQ3UsXA/640?wx_fmt=png&amp;tp=webp&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/>这些文件记录的就是这个接口整体的分析数据<br/><br/>找出最新的文件，用vim打开一看：<br/><a href="https://mmbiz.qpic.cn/mmbiz_png/LHDiahSVnXhv7RIhE32icGiaCnx7uBicR84LibG10P4PM0gla8NkdYNwqSEQiaxb51UUWxJH62Tnrwsfaqo0olHXg57A/640?wx_fmt=png&amp;tp=webp&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" target="_blank"><img src="https://mmbiz.qpic.cn/mmbiz_png/LHDiahSVnXhv7RIhE32icGiaCnx7uBicR84LibG10P4PM0gla8NkdYNwqSEQiaxb51UUWxJH62Tnrwsfaqo0olHXg57A/640?wx_fmt=png&amp;tp=webp&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/>肉眼肯定是没法看，这就需要借助可视化的工具了：<br/><br/><br/><br/>可视化 tideways_xhprof<br/><br/>由于输出的文件格式和之前的xhprof完全一样，所以我这边直接借助了原本xhprof提供的工具 <br/><br/>github：https://github.com/phacility/xhprof<br/><br/><br/><br/>最终上面的分析文件可视化后如下：<br/>https://mmbiz.qpic.cn/mmbiz_png/LHDiahSVnXhs4fa6cxh7fpapG6H17PNhg6IlUhPtFdfd2Owb70WRtt31Ecg4gRTJODxXgt4xjeSRtOqerNcVvoA/640?wx_fmt=png&amp;tp=webp&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1<br/><br/>下一篇，将详细介绍如何安装xhprof可视化工具，以及我们要看什么指标，怎么通过这些指标来指导来做优化，并最终提升的程序的性能<br/><br/><br/><br/>查看原文，可获取我修改版的tideways_xhprof，增加了两个方法，以支持RINIT和RSHUTDOWN中做的一些事情：<br/><br/>tideways_xhprof_swoole_init();<br/><br/>tideways_xhprof_swoole_end();<br/>这样可以更好的支持swoole,&nbsp;&nbsp;readme里有介绍使用方法<br/><br/>原文：https://mp.weixin.qq.com/s/uekLWuXz5i2OBDsnYhwShw
]]>
</description>
</item><item>
<link>https://jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论]  [转]【swoole4.0】一次qps提升之旅(一)]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>https://jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>