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