php性能优化分析工具XDebug 大型网站调试工具


Posted in PHP onMay 22, 2011

一、安装配置

1、下载PHP的XDebug扩展,网址:http://xdebug.org/

2、在Linux下编译安装XDebug

引用
tar -xzf xdebug-2.0.0RC3.gz
cd xdebug-2.0.0RC3
/usr/local/php/bin/phpize
./configure --enable-xdebug
cp modules/xdebug.so /usr/local/php/lib/php/extensions/no-debug-non-zts-20020429/

注:/usr/local/php/lib/php/extensions/no-debug-non-zts-20020429/不同的PHP版本路径不同,也不一定要放在该路径,可以在zend_extension_ts中自行指定xdebug.so所在位置。

引用
vi /usr/local/php/lib/php.ini

修改php.ini,去除PHP加速模块,增加以下配置信息支持XDebug扩展

[Xdebug] 
zend_extension_ts="/usr/local/php/lib/php/extensions/no-debug-non-zts-20020429/xdebug.so" 
xdebug.profiler_enable=on 
xdebug.trace_output_dir="/tmp/xdebug" 
xdebug.profiler_output_dir="/tmp/xdebug" 
xdebug.profiler_output_name="script"

引用
mkdir -p /tmp/xdebug
chmod 755 /tmp/xdebug
chown www:www /tmp/xdebug
/usr/local/apache/bin/apachectl -k restart

3、客户端(Windows):WinCacheGrind

下载地址:http://sourceforge.net/projects/wincachegrind/

二、分析过程

1、访问你的网站,将首页上各种链接点击几遍,XDebug在/tmp/xdebug目录生成以下文件:

usr_local_apache_htdocs_app_checknum_chknum_php_cachegrind.out

usr_local_apache_htdocs_app_login_showHeaderLogin_php_cachegrind.out

usr_local_apache_htdocs_app_play_play_php_cachegrind.out

usr_local_apache_htdocs_app_user_member_php_cachegrind.out

usr_local_apache_htdocs_tag_tags_php_cachegrind.out

usr_local_apache_htdocs_top_top_php_cachegrind.out

2、将以上文件拷贝到Windows上,用客户端软件WinCacheGrind打开每个文件,发现以下PHP程序执行所耗费的时间最长:

/usr/local/apache/htdocs/tag/tags.php

耗时840ms

三、分析结果:

1、/usr/local/apache/htdocs/tag/tags.php

php性能优化分析工具XDebug 大型网站调试工具

(1)耗时最长的filter_tags函数出现在/usr/local/apache/htdocs/tag/tags.php的第158行:

$tags .= filter_tags($videos[$i]['tags'])." ";

   (2)filter_tags函数引自/usr/local/apache/htdocs/include /misc.php,getForbiddenTags函数被filter_tags函数调用了21次,filter_tags函数耗费的时间中绝大多数 因getForbiddenTags函数所致。getForbiddenTags函数的内容如下:

function getForbiddenTags() 
{ $tagsPath=TEMPLATE_FILE_PATH."tags/forbidden_tags.txt"; 
if(file_exists($tagsPath)) 
{ 
$fp = fopen($tagsPath, "r"); 
$arrconf = array (); 
if ($fp) 
{ 
while (!feof($fp)) 
{ 
$line = fgets($fp, 1024); 
$line = trim($line); 
$rows = explode("#", $line); 
$coumns = explode("=", trim($rows[0])); 
if(""!=trim($coumns[0])) 
{ 
$arrconf[trim($coumns[0])] = trim($coumns[1]); 
} 
} 
} 
return $arrconf; 
} 
}

(4)对getForbiddenTags函数进行分析,其中的PHP函数trim被调用了16827次。

php性能优化分析工具XDebug 大型网站调试工具

(5)可能造成瓶颈的原因:

要过滤的156个关键字逐行存放在/usr/local/apache/template/tags/forbidden_tags.txt文件中,文本数据库的效率不高。

逐行读取函数fgets、以及去除字符串两边的空白或者指定的字符的函数trim在高负载下的效率低,可以测试fopen、fread、fscanf之类的文件读取函数,对比一下。

PHP 相关文章推荐
ftp类(example.php)
Oct 09 PHP
php程序效率优化的一些策略小结
Jul 17 PHP
MySQL连接数超过限制的解决方法
Jul 17 PHP
ecshop 批量上传(加入自定义属性)
Mar 20 PHP
浏览器预览PHP文件时顶部出现空白影响布局分析原因及解决办法
Jan 11 PHP
PHP strstr 函数判断字符串是否否存在的实例代码
Sep 28 PHP
php以post形式发送xml的方法
Nov 04 PHP
Laravel中扩展Memcached缓存驱动实现使用阿里云OCS缓存
Feb 10 PHP
PHP递归实现层级树状展开
Apr 01 PHP
thinkphp框架下404页面设置 仅三步
May 14 PHP
php 的反射详解及示例代码
Aug 25 PHP
PHP框架自动加载类文件原理详解
Jun 06 PHP
Look And Say 序列php实现代码
May 22 #PHP
php利用cookie实现访问次数统计代码
May 19 #PHP
PHP操作mysql函数详解,mysql和php交互函数
May 19 #PHP
php异常:Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE  eval()'d code error
May 19 #PHP
php中全局变量global的使用演示代码
May 18 #PHP
一个PHP分页类的代码
May 18 #PHP
PHP sprintf()函数用例解析
May 18 #PHP
You might like
完美解决PHP中文乱码
2009/11/26 PHP
php模拟asp中的XmlHttpRequest实现http请求的代码
2011/03/24 PHP
php+mysql不用递归实现的无限级分类实例(非递归)
2014/07/08 PHP
php+mysqli事务控制实现银行转账实例
2015/01/29 PHP
smarty中常用方法实例总结
2015/08/07 PHP
学习php设计模式 php实现建造者模式
2015/12/07 PHP
PHP二维数组实现去除重复项的方法【保留各个键值】
2017/12/21 PHP
php多进程并发编程防止出现僵尸进程的方法分析
2020/02/28 PHP
动态表格Table类的实现
2009/08/26 Javascript
IE6图片加载的一个BUG解决方法
2010/07/13 Javascript
javascript之典型高阶函数应用介绍二
2013/01/10 Javascript
jquery中html、val与text三者属性取值的联系与区别介绍
2013/12/29 Javascript
JavaScript弹出窗口方法汇总
2014/08/12 Javascript
javascript实现Table排序的方法
2015/05/15 Javascript
jQuery实现切换页面过渡动画效果
2015/10/29 Javascript
Javascript闭包实例详解
2015/11/29 Javascript
bootstrap table表格使用方法详解
2017/04/26 Javascript
js评分组件使用详解
2017/06/06 Javascript
Vue 页面状态保持页面间数据传输的一种方法(推荐)
2018/11/01 Javascript
如何让node运行es6模块文件及其原理详解
2018/12/11 Javascript
JS散列表碰撞处理、开链法、HashTable散列示例
2019/02/08 Javascript
监控微信小程序中的慢HTTP请求过程详解
2019/07/05 Javascript
详解利用nodejs对本地json文件进行增删改查
2019/09/20 NodeJs
javascript绘制简单钟表效果
2020/04/07 Javascript
python错误处理详解
2014/09/28 Python
python try except返回异常的信息字符串代码实例
2019/08/15 Python
Python GUI库PyQt5图形和特效样式QSS介绍
2020/02/25 Python
keras分类之二分类实例(Cat and dog)
2020/07/09 Python
python如何修改文件时间属性
2021/02/05 Python
德国机场停车位比较和预订网站:Ich-parke-billiger
2018/01/08 全球购物
创建索引时需要注意的事项
2013/05/13 面试题
会议开场欢迎词
2014/01/15 职场文书
学习优秀党员杨宗兴先进事迹材料思想汇报
2014/09/14 职场文书
2014年工商所工作总结
2014/12/09 职场文书
Python Flask搭建yolov3目标检测系统详解流程
2021/11/07 Python
分布式架构Redis中有哪些数据结构及底层实现原理
2022/03/13 Redis