背景
最近在预研PHP探针,发现目前开源的主要有PHP-Xhprof、pinpoint、skywalking 三款。对比了一下三款探针,如下图:
xhprof | pinpoint | skywalking | |
---|---|---|---|
开源协议 | Apache License, Version 2.0 | Apache License, Version 2.0 | Apache License, Version 2.0 |
支持框架 | magento、shopware、esales、symfony、wordpress | 支持框架很少 | 支持框架很少 |
用户 | 未找到 | 未找到 | 轻易贷、垫付宝 |
开发语言 | c 、 php | cpp | c |
稳定性 | 有商用产品 | 未知 | 未知 |
扩展性 | 提供了很多借口、可以通过php语言自身实现扩展 | 按照规范些cpp插件 | 扩展性差、需要直接修改php扩展 |
其他 | 采样和发送分离,可以自己实现数据传输的逻辑 | 直接结成了thrift,很难替换成其他 | 采样数据写到日志文件,另一个进程读文件发送数据 |
三种探针都是基于php扩展的方式实现的。具体的php生命周期和扩展加载方式后面再写文章详细说明。
综合来看,xhprof在扩展性、稳定性、支持框架、开发语言方面更胜一筹。所以,先深入研究一下xhprof。xhprof是facebook开发的一个测试php性能的扩展,采集的数据包括函数的调用次数,花费的时间(自身花费时间和包含内部函数花费的时间),所占内存/CPU,所占内存的峰值及所占百分比,目前facebook已经不再维护,Faceboo已经全面使用HHVM,不再使用PHP zend引擎(上述三种探针是基于zend引擎的),Xhprof不支持php7 ,tideways是从xhprof项目fork下来继续进行维护的,目前支持PHP 7.2, 7.1, 7.0, 5.6 and 5.5等版本。tideways探针还是开源的,他收费的是UI展现的服务。
环境搭建
编译php
第一步需要下载php源码,并编译安装debug版本的php,源码地址:https://github.com/php/php-src 具体编译说明参照源码里面的REMDME。记得编译的时候要指定–enable-debug 以便使编译出来的php带有调试信息。
搭建tideways环境
下载tideways源码
地址:https://github.com/tideways/php-xhprof-extension