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 相关文章推荐
WINDOWS服务器安装多套PHP的另类解决方案
Oct 09 PHP
做一个有下拉功能的留言版
Oct 09 PHP
基于mysql的bbs设计(二)
Oct 09 PHP
PHP性能优化工具篇Benchmark类调试执行时间
Dec 06 PHP
php实现mysql数据库操作类分享
Feb 14 PHP
PHP多进程编程实例
Oct 15 PHP
Laravel 5框架学习之子视图和表单复用
Apr 09 PHP
PHP获取文件扩展名的4种方法
Nov 24 PHP
PHP7之Mongodb API使用详解
Dec 26 PHP
简单谈谈php浮点数精确运算
Mar 10 PHP
浅谈PHP检查数组中是否存在某个值 in_array 函数
Jun 13 PHP
YII中Ueditor富文本编辑器文件和图片上传的配置图文教程
Mar 15 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
德劲1103的维修打理经验
2021/03/02 无线电
坏狼的PHP学习教程之第1天
2008/06/15 PHP
PHP中比较两个字符串找出第一个不同字符位置例子
2014/04/08 PHP
PHP实用函数分享之去除多余的0
2015/02/06 PHP
jquery获取iframe中的dom对象(两种方法)
2013/07/02 Javascript
用原生JS获取CLASS对象(很简单实用)
2014/10/15 Javascript
ExpressJS入门实例
2015/01/14 Javascript
jQuery定义背景动态切换效果的方法
2015/03/23 Javascript
Bootstrap框架的学习教程详解(二)
2016/10/18 Javascript
JS及JQuery对Html内容编码,Html转义
2017/02/17 Javascript
Vue2.0 UI框架ElementUI使用方法详解
2017/04/14 Javascript
一篇文章让你彻底弄懂JS的事件冒泡和事件捕获
2017/08/14 Javascript
jQuery实现的两种简单弹窗效果示例
2018/04/18 jQuery
Nuxt.js 数据双向绑定的实现
2019/02/17 Javascript
小程序扫描普通链接二维码跳转小程序指定界面方法
2019/05/07 Javascript
JavaScript展开操作符(Spread operator)详解
2019/07/20 Javascript
nodejs脚本centos开机启动实操方法
2020/03/04 NodeJs
JavaScript实现轮播图特效
2020/04/10 Javascript
Python中条件选择和循环语句使用方法介绍
2013/03/13 Python
解决python中使用plot画图,图不显示的问题
2018/07/04 Python
pandas使用apply多列生成一列数据的实例
2018/11/28 Python
Python单元测试工具doctest和unittest使用解析
2019/09/02 Python
tensorflow2.0与tensorflow1.0的性能区别介绍
2020/02/07 Python
PyCharm无法识别PyQt5的2种解决方法,ModuleNotFoundError: No module named 'pyqt5'
2020/02/17 Python
Python处理mysql特殊字符的问题
2020/03/02 Python
pandas使用之宽表变窄表的实现
2020/04/12 Python
matplotlib阶梯图的实现(step())
2021/03/02 Python
Sephora丝芙兰泰国官方网站:国际知名化妆品购物
2017/11/15 全球购物
认识深刻的检讨书
2014/02/16 职场文书
银行金融服务方案
2014/06/11 职场文书
中专毕业生的自荐书
2014/07/01 职场文书
信用卡逾期证明示例
2014/09/13 职场文书
党政领导班子群众路线对照检查材料思想汇报
2014/09/27 职场文书
python实现Thrift服务端的方法
2021/04/20 Python
Python异常类型以及处理方法汇总
2021/06/05 Python
python处理json数据文件
2022/04/11 Python