PHP性能分析之Xdebug

最近一个PHP程序性能跑的不行,于是又想起来Xdebug这个扩展,并记录一下。
首先去Xdebug官网下载源码包,注意下载对应版本的源码包,我的环境是PHP 5.4.9,安装了最新的Xdebug 2.3.2后,不能使用WinCacheGrindWebGrind进行分析,又重新下载了旧的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
将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是否加载成功。
xdebug2
运行php程序就会在/tmp/xdebug目录下,生成对应的profile文件(cachegrind.out.%t.%p),这里可以使用WinCacheGrindWebGrind进行分析。
Windows下面使用WinCacheGrind进行分析,可以查看PHP执行流程,函数调用次数、耗时。双击列表可以进入详细调用情况。
xdebug3
xdebug6
WebGrind程序部署在安装Xdebug的服务器上即可,会显示已经生成的profile文件,下拉选择进行分析。也可以查看PHP执行流程,函数调用次数、耗时。点击小三角会展开调用栈,后面跟着源码位置,可直接定位查看代码。
xdebug4

参考链接:
前端开发中的性能那点事(一)巧用xdebug
利用Xdebug分析PHP程序,找出性能瓶颈[原创]
php-fpm – 启动参数及重要配置详解

PHP性能分析之Xdebug》上有1条评论

  1. Pingback引用通告: PHP性能分析之xhprof | 勇气

发表评论

电子邮件地址不会被公开。 必填项已用*标注