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 相关文章推荐
第八节 访问方式 [8]
Oct 09 PHP
php 友好URL的实现(吐血推荐)
Oct 04 PHP
一步一步学习PHP(2)――PHP类型
Feb 15 PHP
php+mysql 实现身份验证代码
Mar 24 PHP
php数组函数序列之in_array() - 查找数组中是否存在指定值
Nov 07 PHP
解析php中的fopen()函数用打开文件模式说明
Jun 20 PHP
PHP生成Gif图片验证码
Oct 27 PHP
php实现快速排序的三种方法分享
Mar 12 PHP
laravel安装和配置教程
Oct 29 PHP
PHP面试题之文件目录操作
Oct 15 PHP
微信获取用户地理位置信息的原理与步骤
Nov 12 PHP
php导出csv文件,可导出前导0实例代码
Nov 16 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编写PDF文档生成器
2006/10/09 PHP
PHP 类商品秒杀计时实现代码
2010/05/05 PHP
PHP 魔术函数使用说明
2010/05/14 PHP
php数组添加与删除单元的常用函数实例分析
2015/02/16 PHP
PHP传参之传值与传址的区别
2015/04/24 PHP
国外Lightbox v2.03.3 最新版 下载
2007/10/17 Javascript
js将iframe中控件的值传到主页面控件中的实现方法
2013/03/11 Javascript
javascript使用正则获取url上的某个参数
2014/09/04 Javascript
jquery.cookie.js使用指南
2015/01/05 Javascript
如何提高javascript加载速度
2016/12/26 Javascript
js实现兼容PC端和移动端滑块拖动选择数字效果
2017/02/16 Javascript
ES6新特性七:数组的扩充详解
2017/04/21 Javascript
Vue自定义事件(详解)
2017/08/19 Javascript
javascript 作用于作用域链的详解
2017/09/27 Javascript
浅谈js的解析顺序 作用域 严格模式
2017/10/23 Javascript
Django基础之Model操作步骤(介绍)
2017/05/27 Python
Python 装饰器实现DRY(不重复代码)原则
2018/03/05 Python
Python编写打字训练小程序
2019/09/26 Python
python 协程中的迭代器,生成器原理及应用实例详解
2019/10/28 Python
Python大数据之使用lxml库解析html网页文件示例
2019/11/16 Python
python 实现兔子生兔子示例
2019/11/21 Python
python Socket网络编程实现C/S模式和P2P
2020/06/22 Python
整理HTML5的一些新特性与Canvas的常用属性
2016/01/29 HTML / CSS
丽笙酒店官方网站:Radisson Hotels
2019/05/07 全球购物
联想印度官方网上商店:Lenovo India
2019/08/24 全球购物
Monki官网:斯堪的纳维亚的独立时尚品牌
2020/11/09 全球购物
Ref与out有什么不同
2012/11/24 面试题
ASP.NET中的身份验证有那些
2012/07/13 面试题
介绍一下XMLHttpRequest对象的常用方法和属性
2013/05/24 面试题
绿化先进工作者事迹材料
2014/01/30 职场文书
人力资源总监工作说明
2014/03/03 职场文书
2014年公务员思想汇报范文:全心全意为人民服务
2014/03/06 职场文书
企业宣传策划方案
2014/05/29 职场文书
合唱兴趣小组活动总结
2014/07/10 职场文书
一年级班主任工作总结2014
2014/11/08 职场文书
Window server中安装Redis的超详细教程
2021/11/17 Redis