最近一个PHP程序性能跑的不行,于是又想起来Xdebug这个扩展,并记录一下。
首先去Xdebug官网下载源码包,注意下载对应版本的源码包,我的环境是PHP 5.4.9,安装了最新的Xdebug 2.3.2后,不能使用WinCacheGrind和WebGrind进行分析,又重新下载了旧的Xdebug 2.2.0。
然后在Centos下面编译安装
tar -zxvf xdebug-2.2.0.tgz
cd xdebug-2.2.0
/usr/local/php/bin/phpize
./configure --enable-xdebug --with-php-config=/usr/local/php/bin/php-config
make
make install
编译安装完成后是这样子的
将xdebug扩展复制到php的扩展目录下,并创建/tmp/xdebug文件。
cp /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/xdebug.so /usr/local/php/lib/php/extensions/
mkdir -p /tmp/xdebug
chmod 755 /tmp/xdebug
chown www:www /tmp/xdebug
并更改php.ini如下
; XDEBUG Extension
zend_extension = "/usr/local/php/lib/php/extensions/xdebug.so"
[xdebug]
xdebug.profiler_enable = on
xdebug.trace_output_dir="/tmp/xdebug"
xdebug.profiler_output_dir="/tmp/xdebug"
xdebug.profiler_output_name = cachegrind.out.%t.%p
然后需要重启php-fpm,使配置生效。
这个环境下并没有php-fpm的pid文件,每次重启需要查找进程pid,于是先生成下。
#查找进程id
ps aux | grep php-fpm
#结束进程
kill 6369
编辑/usr/local/php/etc/php-fpm.conf如下,去掉注释
[global]
; Pid file
; Note: the default prefix is /usr/local/php/var
; Default Value: none
pid = run/php-fpm.pid
然后启动php-fpm
#启动php-fpm
/usr/local/php/sbin/php-fpm -c /usr/local/php/lib/php.ini -y /usr/local/php/etc/php-fpm.conf
以后就可以方便的重启php-fpm了。
#关闭php-fpm
kill -INT `cat /usr/local/php/var/run/php-fpm.pid`
#重启php-fpm
kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`
重启完成后,查看phpinfo,Xdebug是否加载成功。
运行php程序就会在/tmp/xdebug目录下,生成对应的profile文件(cachegrind.out.%t.%p),这里可以使用WinCacheGrind或WebGrind进行分析。
Windows下面使用WinCacheGrind进行分析,可以查看PHP执行流程,函数调用次数、耗时。双击列表可以进入详细调用情况。

WebGrind程序部署在安装Xdebug的服务器上即可,会显示已经生成的profile文件,下拉选择进行分析。也可以查看PHP执行流程,函数调用次数、耗时。点击小三角会展开调用栈,后面跟着源码位置,可直接定位查看代码。
参考链接:
前端开发中的性能那点事(一)巧用xdebug
利用Xdebug分析PHP程序,找出性能瓶颈[原创]
php-fpm – 启动参数及重要配置详解