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 相关文章推荐
Zend studio for eclipse中使php可以调用mysql相关函数的设置方法
Oct 13 PHP
IP138 IP地址查询小偷实现代码
Feb 15 PHP
PHP MemCached高级缓存配置图文教程
Aug 05 PHP
php之XML转数组函数的详解
Jun 07 PHP
php 检查电子邮件函数(自写)
Jan 16 PHP
推荐十款免费 WordPress 插件
Mar 24 PHP
PHP转换文本框内容为HTML格式的方法
Jul 20 PHP
PHP页面输出时js设置input框的选中值
Sep 30 PHP
php安装dblib扩展,连接mssql的具体步骤
Mar 02 PHP
thinkPHP5.0框架模块设计详解
Mar 18 PHP
PHP levenshtein()函数用法讲解
Mar 08 PHP
关于Laravel参数验证的一些疑与惑
Nov 19 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
DEDE采集大师官方留后门的删除办法
2011/01/08 PHP
php提示无法加载或mcrypt没有找到 PHP 扩展 mbstring解决办法
2012/03/27 PHP
Yii的Srbac插件用法详解
2016/07/14 PHP
php实现支持中文的文件下载功能示例
2017/08/30 PHP
PHP切割整数工具类似微信红包金额分配的思路详解
2019/09/18 PHP
php中Swoole的热更新实现代码实例
2021/03/04 PHP
脚本吧 - 幻宇工作室用到js,超强推荐expand.js
2006/12/23 Javascript
document.onreadystatechange事件的用法分析
2009/10/17 Javascript
jquery 日期分离成年月日的代码
2010/05/14 Javascript
使用jQuery+HttpHandler+xml模拟一个三级联动的例子
2011/08/09 Javascript
js三种排序算法分享
2012/08/16 Javascript
页面按钮禁用与解除禁用的方法
2014/02/19 Javascript
JavaScript操作cookie类实例
2015/03/31 Javascript
jQuery的 $.ajax防止重复提交的两种方法(推荐)
2016/10/14 Javascript
canvas实现简易的圆环进度条效果
2017/02/28 Javascript
vue-cli+webpack记事本项目创建
2017/04/01 Javascript
JS字符串去除连续或全部重复字符的实例
2018/03/08 Javascript
npm全局模块卸载及默认安装目录修改方法
2018/05/15 Javascript
Python __setattr__、 __getattr__、 __delattr__、__call__用法示例
2015/03/06 Python
Python标准库之collections包的使用教程
2017/04/27 Python
Python3.4编程实现简单抓取爬虫功能示例
2017/09/14 Python
python实现键盘输入的实操方法
2019/07/16 Python
python中eval与int的区别浅析
2019/08/11 Python
python tkinter组件摆放方式详解
2019/09/16 Python
Python列表倒序输出及其效率详解
2020/03/04 Python
python实现图像拼接功能
2020/03/23 Python
解决pyPdf和pyPdf2在合并pdf时出现异常的问题
2020/04/03 Python
基于Python组装jmx并调用JMeter实现压力测试
2020/11/03 Python
如何用tempfile库创建python进程中的临时文件
2021/01/28 Python
CSS3 渐变(Gradients)之CSS3 径向渐变
2016/07/08 HTML / CSS
使用CSS3的rem属性制作响应式页面布局的要点解析
2016/05/24 HTML / CSS
植物选择:Botanic Choice
2017/02/15 全球购物
新加坡网上化妆品店:Best Buy World
2018/05/18 全球购物
2014年党支部学习材料
2014/05/19 职场文书
党委干部批评与自我批评发言稿
2014/09/28 职场文书
原来实习报告是这样写的呀!
2019/07/03 职场文书