1 背景
- PHP的xhprof扩展Facebook不再进行更新和维护,因为Faceboo已经全面使用HHVM,不再使用PHP zend引擎。
- xhprof不支持新版本的PHP(PHP7),tideways扩展是从xhprof项目fork下来继续进行维护的,目前支持PHP 7.2, 7.1, 7.0, 5.6 and 5.5 。
- tideways是开源项目,它收费的只是UI服务,其实 xhgui完全可以满足我们日常的需求
2 功能
tideways是用来测试PHP性能的扩展,它能获取PHP执行的整个过程中调用的函数、调用函数次数、执行时间、CPU时间、内存占用、内存峰值、总执行时间、总CPU时间、总内存占用、总内存峰值等数据,通过以上数据进行分析,找出PHP的性能瓶颈、分析PHP执行过程等。
3 优点
- tideways是一个PHP扩展,结合xhgui,无需在PHP代码中进行埋点来监控代码
- 可以设置执行频率(例如1/100),无需每个请求都生成执行日志,从而导致性能损失;也可以主动控制是否生成执行日志,通过请求参数来控制(debug=1)
- 有简单直接的UI对数据进行转化
- 可以自由的搭配条件进行数据筛选,例如分析某个特定的接口,分析某个时间段的接口请求情况等
4 缺点
虽然是非侵入式的,但是如果对每个接口生成执行日志,那么对CPU和内存的消耗是不可忽略的。
5 实现原理
- tideways扩展负责生成运行日志
- nginx中通过配置fastcgi_param PHP_VALUE auto_prepend_file,在请求开始之前执行auto_prepend_file配置的PHP文件,文件中利用register_shutdown_function方法,在PHP进程结束的时候调用tideways_disable来实现tideways的嵌入,然后将执行日志存入mongodb或者mysql或者文件中,通过xhgui分析之后进行展示,展示形式包括柱状图、瀑布流、火焰图。