文档章节

利用Xdebug分析PHP程序,找出性能瓶颈[原创]

摇滚哈哈狗
 摇滚哈哈狗
发布于 2015/11/05 20:43
字数 575
阅读 1033
收藏 7

一、安装配置
  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扩展

view plainprint?

  1. [Xdebug]  

  2. zend_extension_ts="/usr/local/php/lib/php/extensions/no-debug-non-zts-20020429/xdebug.so"  

  3. xdebug.profiler_enable=on  

  4. xdebug.trace_output_dir="/tmp/xdebug"  

  5. xdebug.profiler_output_dir="/tmp/xdebug"  

  6. 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

  点击在新窗口中浏览此图片

  (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函数的内容如下:

view plainprint?

  1. function getForbiddenTags()  

  2. {  

  3.     

  4.   $tagsPath=TEMPLATE_FILE_PATH."tags/forbidden_tags.txt";  

  5.     if(file_exists($tagsPath))  

  6.     {  

  7.         $fp = fopen($tagsPath"r");  

  8.       $arrconf = array ();  

  9.       if ($fp)   

  10.         {  

  11.         while (!feof($fp))   

  12.             {  

  13.           $line = fgets($fp, 1024);  

  14.           $line = trim($line);  

  15.           $rows = explode("#"$line);  

  16.           $coumns = explode("=", trim($rows[0]));  

  17.                 if(""!=trim($coumns[0]))  

  18.                 {  

  19.               $arrconf[trim($coumns[0])] = trim($coumns[1]);  

  20.                 }  

  21.         }  

  22.       }  

  23.         return $arrconf;  

  24.     }  

  25. }  


  (4)对getForbiddenTags函数进行分析,其中的PHP函数trim被调用了16827次。
  点击在新窗口中浏览此图片

  (5)可能造成瓶颈的原因:
  要过滤的156个关键字逐行存放在/usr/local/apache/template/tags/forbidden_tags.txt文件中,文本数据库的效率不高。
  逐行读取函数fgets、以及去除字符串两边的空白或者指定的字符的函数trim在高负载下的效率低,可以测试fopen、fread、fscanf之类的文件读取函数,对比一下。


© 著作权归作者所有

摇滚哈哈狗
粉丝 14
博文 226
码字总数 28445
作品 0
深圳
程序员
私信 提问
利用Xdebug分析PHP程序,找出性能瓶颈

 经济学中有一条著名的80-20定律,引用到编程中,就是:80%的性能瓶颈是由20%的代码引起的。借助PHP的XDebug扩展,可以有效地找出这20%的代码。   一、安装配置   1、下载PHP的XDebug扩...

刘赤龙
2010/06/08
495
0
Xdebug—php调试工具

参考文章 http://koda.iteye.com/blog/537421 百度百科:http://baike.baidu.com/view/1823486.htm 中文手册 http://www.phptogether.com/xdebugdoc/ XDebug是一个开放源代码的PHP程序调试器......

麦田兔子
2013/08/12
0
0
使用xdebug调试PHP程序

为什么需要Debugger? 很多PHP程序员调试使用echo、print_r()、var_dump()、printf()等,其实对于有较丰富开发经验的程序员来说这些也已经足够了,他们往往可以在程序执行的过程中,通过输出特...

鉴客
2012/03/13
3.5K
2
Xdebug的安装-(无错可执行版)

xdebug是一个开源的php调试器,以php模块的形式加载并被使用。可以用来跟踪,调试和分析PHP程序的运行状况. 这里以PHP5.2.13为例, 1.下载php_xdebug-2.1.0-5.2.dll文件, http://www.xdebug.o...

晨曦之光
2012/03/09
743
0
PHP环境下配置WebGrind——让你的网站性能看得见

今天面试,面试官问我PHP代码怎么去测试其使用性能,我随口一个microtime,测试时间,其实那时候想说一个Wamp下的组件着,结果没记住名字,也想到了Apache的ab.exe,现在想想,唉,这些基本的...

技术小甜
2017/11/15
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OpenStack 简介和几种安装方式总结

OpenStack :是一个由NASA和Rackspace合作研发并发起的,以Apache许可证授权的自由软件和开放源代码项目。项目目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。OpenSta...

小海bug
昨天
6
0
DDD(五)

1、引言 之前学习了解了DDD中实体这一概念,那么接下来需要了解的就是值对象、唯一标识。值对象,值就是数字1、2、3,字符串“1”,“2”,“3”,值时对象的特征,对象是一个事物的具体描述...

MrYuZixian
昨天
6
0
数据库中间件MyCat

什么是MyCat? 查看官网的介绍是这样说的 一个彻底开源的,面向企业应用开发的大数据库集群 支持事务、ACID、可以替代MySQL的加强版数据库 一个可以视为MySQL集群的企业级数据库,用来替代昂贵...

沉浮_
昨天
6
0
解决Mac下VSCode打开zsh乱码

1.乱码问题 iTerm2终端使用Zsh,并且配置Zsh主题,该主题主题需要安装字体来支持箭头效果,在iTerm2中设置这个字体,但是VSCode里这个箭头还是显示乱码。 iTerm2展示如下: VSCode展示如下: 2...

HelloDeveloper
昨天
8
0
常用物流快递单号查询接口种类及对接方法

目前快递查询接口有两种方式可以对接,一是和顺丰、圆通、中通、天天、韵达、德邦这些快递公司一一对接接口,二是和快递鸟这样第三方集成接口一次性对接多家常用快递。第一种耗费时间长,但是...

程序的小猿
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部