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 相关文章推荐
国内php原创论坛
Oct 09 PHP
MVC模式的PHP实现
Oct 09 PHP
php代码把全角数字转为半角数字
Dec 10 PHP
用Zend Encode编写开发PHP程序
Feb 21 PHP
php gd2 上传图片/文字水印/图片水印/等比例缩略图/实现代码
May 15 PHP
Fine Uploader文件上传组件应用介绍
Jan 06 PHP
php发送post请求的三种方法
Feb 11 PHP
php function用法如何递归及return和echo区别
Mar 07 PHP
Symfony2实现在doctrine中内置数据的方法
Feb 05 PHP
php中关于长度计算容易混淆的问题分析
May 27 PHP
PHP的RSA加密解密方法以及开发接口使用
Feb 11 PHP
phpQuery采集网页实现代码实例
Apr 02 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
千呼万唤始出来,DOTA2勇士令状不朽宝藏Ⅱ现已推出
2020/08/25 DOTA
PHP对表单提交特殊字符的过滤和处理方法汇总
2014/02/18 PHP
Windows下PHP开发环境搭建教程(Apache+PHP+MySQL)
2016/06/13 PHP
PHP实现QQ快速登录的方法
2016/09/28 PHP
Nigma vs AM BO3 第二场2.13
2021/03/10 DOTA
如何用JavaScript动态呼叫函数(两种方式)
2013/05/03 Javascript
js将table的每个td的内容自动赋值给其title属性的方法
2016/10/13 Javascript
微信小程序日历组件calendar详解及实例
2017/06/08 Javascript
vue实现全选和反选功能
2017/08/31 Javascript
详解vue axios用post提交的数据格式
2018/08/07 Javascript
原生JS+HTML5实现的可调节写字板功能示例
2018/08/30 Javascript
mpvue微信小程序多列选择器用法之省份城市选择的实现
2019/03/07 Javascript
微信小程序页面上下滚动效果
2020/11/18 Javascript
[58:54]EG vs RNG 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
python基本语法练习实例
2017/09/19 Python
python学生信息管理系统
2018/03/13 Python
Python文件操作方法详解
2020/02/09 Python
python中文分词库jieba使用方法详解
2020/02/11 Python
Idea安装python显示无SDK问题解决方案
2020/08/12 Python
Python 实现PS滤镜中的径向模糊特效
2020/12/03 Python
关于canvas绘制模糊问题的解决方法
2019/09/24 HTML / CSS
丝芙兰加拿大官方网站:SEPHORA加拿大
2018/11/20 全球购物
岗位聘任书范文
2014/03/29 职场文书
仓库管理计划书
2014/05/04 职场文书
需求分析说明书
2014/05/09 职场文书
物业公司的岗位任命书
2014/06/06 职场文书
2015年人力资源部工作总结
2015/04/30 职场文书
红白喜事主持词
2015/07/06 职场文书
反腐倡廉学习心得体会范文
2015/08/15 职场文书
2019如何书写演讲稿?
2019/07/01 职场文书
评估“风险”创业计划的几大要点
2019/08/12 职场文书
2019年12月24日平安夜祝福语集锦
2019/12/24 职场文书
关于Python OS模块常用文件/目录函数详解
2021/07/01 Python
画错魏国疆域啦!《派对咖孔明》动画因作画失误于官网致歉
2022/04/07 日漫
python处理json数据文件
2022/04/11 Python
Web应用开发TypeScript使用详解
2022/05/25 Javascript