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 相关文章推荐
第九节--绑定
Nov 16 PHP
PHP URL地址获取函数代码(端口等) 推荐
May 15 PHP
ThinkPHP 防止表单重复提交的方法
Aug 08 PHP
PHP安装memcached扩展笔记
May 28 PHP
Yii rules常用规则示例
Mar 15 PHP
使用ThinkPHP生成缩略图及显示
Apr 27 PHP
php检测mysql表是否存在的方法小结
Jul 20 PHP
ThinkPHP框架实现的MySQL数据库备份功能示例
May 24 PHP
PHP创建文件及写入数据(覆盖写入,追加写入)的方法详解
Feb 15 PHP
Swoole4.4协程抢占式调度器详解
May 23 PHP
Laravel创建数据库表结构的例子
Oct 09 PHP
open_basedir restriction in effect. 原因与解决方法
Mar 14 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
PHP5在Apache下的两种模式的安装
2006/09/05 PHP
基于PHP给大家讲解防刷票的一些技巧
2015/11/18 PHP
PHP反射机制原理与用法详解
2017/02/15 PHP
PHP实现重载的常用方法实例详解
2017/10/18 PHP
PHP实现动态获取函数参数的方法示例
2018/04/02 PHP
List Information About the Binary Files Used by an Application
2007/06/18 Javascript
javascript 图片上一张下一张链接效果代码
2010/03/12 Javascript
js鼠标左右键 键盘值小结
2010/06/11 Javascript
30个最佳jQuery Lightbox效果插件分享
2011/04/11 Javascript
JS无法捕获滚动条上的mouse up事件的原因猜想
2012/03/21 Javascript
编程语言JavaScript简介
2014/10/16 Javascript
JS验证邮件地址格式方法小结
2015/12/01 Javascript
Bootstrap选项卡学习笔记分享
2017/02/13 Javascript
防止重复发送 Ajax 请求
2017/02/15 Javascript
利用jqprint插件打印页面内容的实现方法
2018/01/09 Javascript
nodejs+mongodb aggregate级联查询操作示例
2018/03/17 NodeJs
微信小程序中使用ECharts 异步加载数据的方法
2018/06/27 Javascript
javascript设计模式 ? 抽象工厂模式原理与应用实例分析
2020/04/09 Javascript
JavaScript Tab菜单实现过程解析
2020/05/13 Javascript
微信小程序实现底部弹出模态框
2020/11/18 Javascript
用Pycharm实现鼠标滚轮控制字体大小的方法
2019/01/15 Python
解决python多行注释引发缩进错误的问题
2019/08/23 Python
python可视化text()函数使用详解
2020/02/11 Python
pandas的resample重采样的使用
2020/04/24 Python
Python读取JSON数据操作实例解析
2020/05/18 Python
基于Python实现体育彩票选号器功能代码实例
2020/09/16 Python
物流专业大学应届生求职信
2013/11/03 职场文书
土建资料员岗位职责
2014/01/04 职场文书
职业生涯规划书基本格式
2014/01/06 职场文书
医院检讨书范文
2014/02/01 职场文书
二年级语文教学反思
2014/02/02 职场文书
生产厂长岗位职责
2014/02/21 职场文书
导师工作推荐信范文
2014/05/17 职场文书
关于感恩的演讲稿500字
2014/08/26 职场文书
欠条格式范本
2015/07/03 职场文书
golang switch语句的灵活写法介绍
2021/05/06 Golang