使用Xdebug和Webgrind优化PHP代码

文章目录
  1. 1. 安装
  2. 2. 配置

在PHP开发过程中找到并修复性能瓶颈(performance bottlenecks)往往是非常困难和耗时的。为了定位问题,我们可能会在疑似影响性能的代码的开始和结束之间打上标记点,计算时间差,来定位问题,CI框架提供的基准测试类就是这样工作,这种方式对小型项目起到方便快捷的作用,但对大项目往往吃力不讨好,好比在工业时代,却是用石器时代的工具。这时候我们可以借助Xdebug,webgrind这样的工具来定位到和可视化php代码中的性能瓶颈。

Xdebug是PHP拓展,可以用来跟踪,调试和分析PHP程序的运行状况。而Webgrind是Web应用,提供一个可视化工具,来分析、查看Xdebug性能日志功能。在Linux KDE环境下可以用KChaceGrind,windows 下可以用winChaceGrind来替换Webgrind查看分析Xdebug日志。

安装

  1. 源码编译安装xdebug
1
2
3
4
5
6
wget https://xdebug.org/files/xdebug-2.5.5.tgz
tar -xzvf xdebug-2.5.5.tgz
phpize
./configure --enable-xdebug
make
make install
  1. 配置php.ini
    可以通过php -i | grep 'php.ini'快速找到php.ini文件位置。在php.ini文件最后添加如下:
1
2
3
4
5
6
7
8
9
10
11
[xdebug]
zend_extension=/you-php-extension-dir/xdebug.so //可通过命令`php -i | grep 'extension_dir'`查看拓展安装的目录
xdebug.profiler_enable = 1
xdebug.profiler_enable_trigger = 1
xdebug.profiler_output_name = cachegrind.out.%p
xdebug.profiler_output_dir =/var/tmp/xdebug_profilers/
xdebug.trace_output_dir =/var/tmp/xdebug_traces/
xdebug.auto_trace = 0
xdebug.collect_params = 4
xdebug.collect_return = 1
xdebug.show_mem_delta = 1
  1. 重启PHP-FPM
    如果PHP-FPM管理php fastcgi则需要重启php-fpm使其生效
1
kill -USR2 `cat php-fpm.pid`
  1. 安装webgrind
1
2
3
git clone https://github.com/jokkedk/webgrind
cd webgrind
找到config.php文件,修改$profilerDir,将其设置成xdebug.profiler_output_dir配置项值

配置

下面是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
2
3
4
5
6
%p 当前进程id
%r 随机数字
%u 时间戳(微秒格式)
%H $_SERVER['HTTP_HOST']的值
%R $_SERVER['REQUEST_URI']的值
%s url路径,路径分割符会转化成下划线
  • xdebug.profiler_append
    默认情况下,Xdebug会覆盖输入文件,设置此选项开启后会追加日志信息到文件