最近一个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 – 启动参数及重要配置详解
Pingback引用通告: PHP性能分析之xhprof | 勇气