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时间格式控制符对照表分享
Jul 23 PHP
PHP strtotime函数用法、实现原理和源码分析
Feb 04 PHP
PHP嵌套输出缓冲代码实例
May 12 PHP
PHP实现递归无限级分类
Oct 22 PHP
Thinkphp无限级分类代码
Nov 11 PHP
php5.4传引用时报错问题分析
Jan 22 PHP
PHP程序中的文件锁、互斥锁、读写锁使用技巧解析
Mar 21 PHP
Mac版PhpStorm之XAMPP整合apache服务器配置的图文教程详解
Oct 13 PHP
PHP中的use关键字及文件的加载详解
Nov 28 PHP
PHP中的使用curl发送请求(GET请求和POST请求)
Feb 08 PHP
PHP实现将上传图片自动缩放到指定分辨率,并保持清晰度封装类示例
Jun 17 PHP
PHP之多条件混合筛选功能的实现方法
Oct 09 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/06/01 PHP
理解和运用PHP中的多态性[译]
2011/08/02 PHP
PHP根据IP地址获取所在城市具体实现
2013/11/27 PHP
PHP高手需要要掌握的知识点
2014/08/21 PHP
PHP给前端返回一个JSON对象的实例讲解
2018/05/31 PHP
thinkphp5.1 文件引入路径问题及注意事项
2018/06/13 PHP
PHP bin2hex()函数基础实例讲解
2019/02/11 PHP
在 Laravel 项目中使用 webpack-encore的方法
2019/07/21 PHP
使用js实现雪花飘落效果
2013/08/26 Javascript
jquery插件开发之实现jquery手风琴功能分享
2014/03/10 Javascript
Javascript原型链和原型的一个误区
2014/10/22 Javascript
javascript使用appendChild追加节点实例
2015/01/12 Javascript
JS简单实现多级Select联动菜单效果代码
2015/09/06 Javascript
jQuery实现Flash效果上下翻动的中英文导航菜单代码
2015/09/22 Javascript
浅谈javascript中遇到的字符串对象处理
2016/11/18 Javascript
实现Vue的markdown文档可以在线运行的方法示例
2018/12/11 Javascript
Vue之Mixins(混入)的使用方法
2019/09/24 Javascript
Python中使用不同编码读写txt文件详解
2015/05/28 Python
python使用pymysql实现操作mysql
2016/09/13 Python
详解10个可以快速用Python进行数据分析的小技巧
2019/06/24 Python
Python 简单计算要求形状面积的实例
2020/01/18 Python
wxPython修改文本框颜色过程解析
2020/02/14 Python
python实现数字炸弹游戏程序
2020/07/17 Python
Python过滤序列元素的方法
2020/07/31 Python
基于tensorflow __init__、build 和call的使用小结
2021/02/26 Python
质检部岗位职责
2013/11/11 职场文书
调解员先进事迹材料
2014/02/07 职场文书
通用自荐信范文
2014/03/14 职场文书
阳光体育活动总结
2014/04/30 职场文书
岗位明星事迹材料
2014/05/18 职场文书
小学生运动会通讯稿
2014/09/23 职场文书
2015年元旦标语大全
2014/12/09 职场文书
奔腾年代观后感
2015/06/09 职场文书
百家讲坛观后感
2015/06/12 职场文书
python解决12306登录验证码的实现
2021/04/18 Python
Go语言基础知识点介绍
2021/07/04 Golang