在PHP开发过程中找到并修复性能瓶颈(performance bottlenecks)往往是非常困难和耗时的。为了定位问题,我们可能会在疑似影响性能的代码的开始和结束之间打上标记点,计算时间差,来定位问题,CI框架提供的基准测试类就是这样工作,这种方式对小型项目起到方便快捷的作用,但对大项目往往吃力不讨好,好比在工业时代,却是用石器时代的工具。这时候我们可以借助Xdebug,webgrind这样的工具来定位到和可视化php代码中的性能瓶颈。
Xdebug是PHP拓展,可以用来跟踪,调试和分析PHP程序的运行状况。而Webgrind是Web应用,提供一个可视化工具,来分析、查看Xdebug性能日志功能。在Linux KDE环境下可以用KChaceGrind
,windows 下可以用winChaceGrind
来替换Webgrind查看分析Xdebug日志。
安装
- 源码编译安装xdebug
1 | wget https://xdebug.org/files/xdebug-2.5.5.tgz |
- 配置php.ini
可以通过php -i | grep 'php.ini'
快速找到php.ini文件位置。在php.ini文件最后添加如下:
1 | [xdebug] |
- 重启PHP-FPM
如果PHP-FPM管理php fastcgi则需要重启php-fpm使其生效
1 | kill -USR2 `cat php-fpm.pid` |
- 安装webgrind
1 | git clone https://github.com/jokkedk/webgrind |
配置
下面是xdebug配置参数一些说明
-
xdebug.profiler_enable
此配置项开启Xdebug内置的性能优化器,1或者on开启,0或者off关闭 -
xdebug.profiler_enable_trigger
当这个选项设置开启时候,Xdebug内置的性能优化器,只有在GET/POST或者Cookie带有XDEBUG_PROFILE时候,比如http://www.cyub.vip/script.php?XDEBUG_PROFILE,才会记录性能日志。此时的xdebug.profiler_enable必须是关闭状态 -
xdebug.profiler_output_dir
xdebug性能优化器信息输入目录路径,默认是/tmp -
xdebug.profiler_output_name
这个选项设置了Xdebug输入信息日志文件的名称格式。默认格式是cachegrind.out.%p,其中%p是进程id。其他重要占位参数有:
1 | %p 当前进程id |
- xdebug.profiler_append
默认情况下,Xdebug会覆盖输入文件,设置此选项开启后会追加日志信息到文件