【swoole4.0】一次qps提升之旅(一)

2019年4月8日 228点热度 0人点赞 0条评论

源起

最近基于swoole的一个mvc开发框架做了一个项目,完成之后对其中一个接口例行做了一次压测,本机上得到qps是3600,由于接口功能比较简单,所以又花了点时间用beego和spring boot实现了相同的功能,也压测了一下,最终对比如下:

swoole:  3600qps

beego:   2200 qps

spring:   600qps


(ps: 无意比较优劣,应该是用beego和spring boot的姿势不对)


swoole的结果符合预期,后来经过一翻折腾(加了一些逻辑,完善了一些底层框架代码),再一压这个接口,qps下降到了2300

真是一顿操作猛如虎,性能下降35%啊


优化

做为一个有追求的phper,这是不能忍的,必需找到原因并解决之,但光喊口号是不行的,必需有方法,一般我们会通过几种方式分析:

  1. 日志法:通过各种日志,查看耗时,找出相应的问题,但这种方法有几个缺点:

    1. 粒度太粗,不好控制

    2. 侵入性太强,需要人工打点

    3. 性能指标不够,只能分析出大致的耗时,但不能分区i/o, cpu时间乖

  2. xdebug:是我认为目前最牛逼的性能分析工具,可以无侵入式的详细的记录完整的调用链,唯一的遗憾是与swoole不兼容

  3. xhprof: facebook出口的一款性能分析工具,简单易用,问题是:后期不维护了,对现在的php版本以及swoole支持度都不好

  4. 第三方的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 文件夹下看到如下的文件:

图片

这些文件记录的就是这个接口整体的分析数据

找出最新的文件,用vim打开一看:

图片

肉眼肯定是没法看,这就需要借助可视化的工具了:


可视化 tideways_xhprof

由于输出的文件格式和之前的xhprof完全一样,所以我这边直接借助了原本xhprof提供的工具 

github:https://github.com/phacility/xhprof

最终上面的分析文件可视化后如下:

图片

下一篇,将详细介绍如何安装xhprof可视化工具,以及我们要看什么指标,怎么通过这些指标来指导来做优化,并最终提升的程序的性能


查看原文,可获取我修改版的tideways_xhprof,增加了两个方法,以支持RINIT和RSHUTDOWN中做的一些事情:

tideways_xhprof_swoole_init();

tideways_xhprof_swoole_end();

这样可以更好的支持swoole,  readme里有介绍使用方法


----------伟大的分割线-----------

PHP饭米粒(phpfamily) 由一群靠谱的人建立,愿为PHPer带来一些值得细细品味的精神食粮!

饭米粒只发原创或授权发表的文章,不转载网上的文章

所发的文章,均可找到原作者进行沟通。

也希望各位多多打赏(算作稿费给文章作者),更希望大家多多投搞。

投稿请联系:

[email protected]

本文由 桶哥 授权 饭米粒 发布,转载请注明本来源信息和以下的二维码(长按可识别二维码关注)

图片

36130【swoole4.0】一次qps提升之旅(一)

这个人很懒,什么都没留下

文章评论