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 framework多模块多布局配置
Feb 26 PHP
PHP include任意文件或URL介绍
Apr 29 PHP
ThinkPHP权限认证Auth实例详解
Jul 22 PHP
WordPress中is_singular()函数简介
Feb 05 PHP
迪菲-赫尔曼密钥交换(Diffie?Hellman)算法原理和PHP实现版
May 12 PHP
php如何实现只替换一次或N次
Oct 29 PHP
使用php实现从身份证中提取生日
May 09 PHP
php简单的上传类分享
May 15 PHP
PHP符合PSR编程规范的实例分享
Dec 21 PHP
PHP实现基于栈的后缀表达式求值功能
Nov 10 PHP
PHP切割整数工具类似微信红包金额分配的思路详解
Sep 18 PHP
Laravel Reponse响应客户端示例详解
Sep 03 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中用PDO查询Mysql来避免SQL注入风险的方法
2013/04/25 PHP
基于preg_match_all采集后数据处理的一点心得笔记(编码转换和正则匹配)
2014/01/31 PHP
从阿里妈妈发现的几个不错的表单验证函数
2007/09/21 Javascript
ymPrompt的doHandler方法来实现获取子窗口返回值的方法
2010/06/25 Javascript
js实现延迟加载的方法
2015/06/24 Javascript
非常棒的jQuery图片轮播效果
2016/04/17 Javascript
详解能在多种前端框架下使用的表格控件
2017/01/11 Javascript
Node.js操作系统OS模块用法分析
2019/01/04 Javascript
JS document form表单元素操作完整示例
2020/01/13 Javascript
[01:06:12]VP vs NIP 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
用Python编写分析Python程序性能的工具的教程
2015/04/01 Python
python通过定义一个类实例作为ftp回调方法
2015/05/04 Python
python协程用法实例分析
2015/06/04 Python
Python切片知识解析
2016/03/06 Python
Python判断文本中消息重复次数的方法
2016/04/27 Python
使用python在本地电脑上快速处理数据
2017/06/22 Python
修复CentOS7升级Python到3.6版本后yum不能正确使用的解决方法
2018/01/26 Python
Python遍历文件夹 处理json文件的方法
2019/01/22 Python
python读取图片任意范围区域
2019/01/23 Python
python监控nginx端口和进程状态
2019/09/06 Python
python的faker库用法
2019/11/28 Python
Python编译为二进制so可执行文件实例
2019/12/23 Python
Pytorch根据layers的name冻结训练方式
2020/01/06 Python
tensorflow指定GPU与动态分配GPU memory设置
2020/02/03 Python
python编程进阶之类和对象用法实例分析
2020/02/21 Python
塑料制成的可水洗的编织平底鞋和鞋子:Rothy’s
2018/09/16 全球购物
Farfetch澳大利亚官网:Farfetch Australia
2020/04/26 全球购物
财务分析个人的自荐书范文
2013/11/24 职场文书
创业计划书撰写原则
2014/01/25 职场文书
微信营销策划方案
2014/02/24 职场文书
实用的简历自我评价
2014/03/06 职场文书
大学同学会活动方案
2014/08/20 职场文书
2014年党员教师自我剖析材料
2014/09/30 职场文书
公司保洁员岗位职责
2015/02/13 职场文书
Linux7.6二进制安装Mysql8.0.27详细操作步骤
2021/11/27 MySQL
Django+Nginx+uWSGI 定时任务的实现方法
2022/01/22 Python