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实现的获取URL信息的类
Jan 02 PHP
php 友好URL的实现(吐血推荐)
Oct 04 PHP
php面向对象全攻略 (五) 封装性
Sep 30 PHP
PHP+ajax 无刷新删除数据
Feb 20 PHP
PHP读取ACCESS数据到MYSQL的代码
May 11 PHP
php file_put_contents()功能函数(集成了fopen、fwrite、fclose)
May 24 PHP
一个PHP实现的轻量级简单爬虫
Jul 08 PHP
如何批量清理系统临时文件(语言:C#、 C/C++、 php 、python 、java )
Feb 01 PHP
PHP使用php-resque库配合Redis实现MQ消息队列的教程
Jun 29 PHP
PHP基于自定义函数实现的汉字转拼音功能实例
Sep 30 PHP
详解关于php的xdebug配置(编辑器vscode)
Jan 29 PHP
PHP与Web页面的交互示例详解二
Aug 04 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分页显示制作详细讲解
2006/10/09 PHP
PHP遍历目录文件的常用方法小结
2017/02/03 PHP
PHP在同一域名下两个不同的项目做独立登录机制详解
2017/09/22 PHP
onsubmit阻止form表单提交与onclick的相关操作
2010/09/03 Javascript
基于jQuery的360图片展示实现代码
2012/06/14 Javascript
有关于eclipse配置spket需要注意的一些地方
2013/04/07 Javascript
JavaScript实现url地址自动检测并添加URL链接示例代码
2013/11/12 Javascript
JS简单计算器实例
2015/01/20 Javascript
每天一篇javascript学习小结(String对象)
2015/11/18 Javascript
AngularJs 弹出模态框(model)
2016/04/07 Javascript
30分钟快速掌握Bootstrap框架
2016/05/24 Javascript
解析jQueryEasyUI的使用
2016/11/22 Javascript
jQuery实现手机上输入后隐藏键盘功能
2017/01/04 Javascript
js实现二级导航功能
2017/03/03 Javascript
jQuery遮罩层实例讲解
2017/05/11 jQuery
js 发布订阅模式的实例讲解
2017/09/10 Javascript
Vue2.0学习之详解Vue 组件及父子组件通信
2017/12/12 Javascript
学习jQuery中的noConflict()用法
2018/09/28 jQuery
微信小程序模板消息限制实现无限制主动推送的示例代码
2019/08/27 Javascript
vue 实现购物车总价计算
2019/11/06 Javascript
怎么理解wx.navigateTo的events参数使用详情
2020/05/18 Javascript
JS实现躲避粒子小游戏
2020/06/18 Javascript
python实现图片筛选程序
2018/10/24 Python
django和vue实现数据交互的方法
2019/08/21 Python
基于Django实现日志记录报错信息
2019/12/17 Python
Python过滤掉numpy.array中非nan数据实例
2020/06/08 Python
Maisons du Monde德国:法国家具和装饰的市场领导者
2019/07/26 全球购物
库存图片、照片、矢量图、视频和音乐:Shutterstock
2021/02/12 全球购物
网络安全方面的面试题
2015/11/04 面试题
Python的两道面试题
2013/06/29 面试题
反四风对照检查材料
2014/09/22 职场文书
安全生产标语大全
2014/10/06 职场文书
大学生迟到检讨书500字
2014/10/17 职场文书
2015年商场工作总结
2015/04/27 职场文书
家装电话营销开场白
2015/05/29 职场文书
详解解Django 多对多表关系的三种创建方式
2021/08/23 Python