php7使用xhprof测试php性能

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分析之后进行展示,展示形式包括柱状图、瀑布流、火焰图。

相关推荐