大型网站调试工具之一(php性能优化分析工具XDebug)

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

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

  1. function getForbiddenTags()
  2. {
  3. $tagsPath=TEMPLATE_FILE_PATH."tags/forbidden_tags.txt";
  4. if(file_exists($tagsPath))
  5. {
  6. $fp = fopen($tagsPath, "r");
  7. $arrconf = array ();
  8. if ($fp)
  9. {
  10. while (!feof($fp))
  11. {
  12. $line = fgets($fp, 1024);
  13. $line = trim($line);
  14. $rows = explode("#", $line);
  15. $coumns = explode("=", trim($rows[0]));
  16. if(""!=trim($coumns[0]))
  17. {
  18. $arrconf[trim($coumns[0])] = trim($coumns[1]);
  19. }
  20. }
  21. }
  22. return $arrconf;
  23. }
  24. }
  1. function getForbiddenTags()
  2. {
  3. $tagsPath=TEMPLATE_FILE_PATH."tags/forbidden_tags.txt";
  4. if(file_exists($tagsPath))
  5. {
  6. $fp = fopen($tagsPath, "r");
  7. $arrconf = array ();
  8. if ($fp)
  9. {
  10. while (!feof($fp))
  11. {
  12. $line = fgets($fp, 1024);
  13. $line = trim($line);
  14. $rows = explode("#", $line);
  15. $coumns = explode("=", trim($rows[0]));
  16. if(""!=trim($coumns[0]))
  17. {
  18. $arrconf[trim($coumns[0])] = trim($coumns[1]);
  19. }
  20. }
  21. }
  22. return $arrconf;
  23. }
  24. }
  1. function getForbiddenTags()
  2. {
  3. $tagsPath=TEMPLATE_FILE_PATH."tags/forbidden_tags.txt";
  4. if(file_exists($tagsPath))
  5. {
  6. $fp = fopen($tagsPath, "r");
  7. $arrconf = array ();
  8. if ($fp)
  9. {
  10. while (!feof($fp))
  11. {
  12. $line = fgets($fp, 1024);
  13. $line = trim($line);
  14. $rows = explode("#", $line);
  15. $coumns = explode("=", trim($rows[0]));
  16. if(""!=trim($coumns[0]))
  17. {
  18. $arrconf[trim($coumns[0])] = trim($coumns[1]);
  19. }
  20. }
  21. }
  22. return $arrconf;
  23. }
  24. }

  (4)对getForbiddenTags函数进行分析,其中的PHP函数trim被调用了16827次。
  

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

时间: 2024-10-11 04:20:03

大型网站调试工具之一(php性能优化分析工具XDebug)的相关文章

柯南君:教你如何对待大型电商平台的性能优化?之 一 (方法、指标、工具、定位)

柯南君:教你如何对待大型电商平台的性能优化?之 一 (方法.指标.工具.定位) 柯南君的朋友"闲哥"最近遇到了点困扰---"大型网站平台如何对待性能优化,以及如何针对性调优?",柯南君今天,想谈一下性能优化的战略,主要是一些企业架构级别的技术和方法.柯南君将自己的个人经验和各家公司大咖的经验一起汇总给大家,如有瑕疵,请大家及时指正. 柯南君有句自律的口头语"如果你不能成为一个追求性能的疯子,那么性能将会把你变成疯子"        序曲: 如何评

mysql 性能优化常用工具

mysql 性能优化常用工具: 常用性能检测工具 show engine innodb  status show full processlist information_schema.processlist explain create table innodb_table_monitor(a int) engine=innodb; innodb_locks innodb_lock_wait innodb_trx zabbix监控 pt-tools 工具 性能优化的两种方式: 1.执行计划的解

网站建设过程中性能优化的34条经验方法

1 .减少HTTP请求数量 (Minimize HTTP Requests) tag:content 80%的用户响应时间被花费在前端,而这其中的绝大多数时间是用于下载页面中的图片.样式表.脚本以及Flash这些组件.减少这些组件的数量就可以减少展示页面所需的请求数,而这是提高网页响应速度的关键. 朴素的页面设计当然是减少组件的一种途径,但有没有能兼顾丰富的页面内容和快速的响应速度的方法呢?下面就是一些不错的技巧,能在提供丰富的页面展现的同时,减少Http请求数量: 合并文件,通过把所有脚本置于

如何更有效使用 Rational AppScan 扫描大型网站,第 2 部分: 案例分析

使用 AppScan 进行扫描 针对大型网站的扫描,我们按照戴明环 PDCA 的方法论来进行规划和讨论,建议 AppScan 使用步骤:计划(Plan).执行(Do).检查(check).分析(Analysis and Action). 在计划阶段:明确目的,进行策略性的选择和任务分解. 明确目的:选择合适的扫描策略 了解对象:首先进行探索,了解网站结构和规模 确定策略:进行对应的配置 按照目录进行扫描任务的分解 按照扫描策略进行扫描任务的分解 执行阶段:一边扫描一遍观察 进行扫描 先爬后扫(继

ubifs性能优化分析

本文通过分析ubifs的mount.read.write和commit流程,挖掘ubifs背后的设计决策和性能优化手段,并结合自身产品的特点,给出一些读写性能改进方案. 1.     ubifs mount流程 mount过程就是初始化对象的过程.这其中包括上层(vfs层.页缓存层.通用块层)的回调接口的注册,从设备中获取相关信息(super block, master node,log,orphan, index node),初始化ubifs_info.TNC.LPT等内部对象,并对maste

wordpress和传统网站的加载性能优化

前言 网站的性能优化是非常重要的,直接决定了用户体验,和网站的负载能力. Wordpress是一款非常受欢迎的Blog/CMS开源软件.全球数百万的网站使用wordpress搭建. 那么,如何让wordpress的性能.效能达到最佳,在减少服务器负荷的情况下,提高网站的访问速度,或者说提高网站性能,提高用户的访问体验呢? 锐壳主机的管理员莫小哥来帮你解决这些问题吧.写作水平和知识水平有限,如果有不通顺,或者错误的地方,还请谅解. 网站速度的瓶颈主要是: - 宽带瓶颈.用户的网络和服务器之间的网络

前端性能优化分析

说道性能优化,相信大家都看过网页的源代码,和我们平常写的可能有些不同,在审查元素里面看到的代码都是经过压缩过的,这也是我们前端优化的一种,在一些比较大的公司会使用到grunt来进行代码的压缩或者是合并,在一些小的公司就会使用一些别的方法,下面我就简单介绍一下比较常见的前端优化. 在这里我们主要分为三个方向来介绍,首先我们要介绍的就是网络方面的,这个主要分为DNS的解析,CDN的加速,和延迟加载以及预加载在这里的cdn主要是借助于一些大型公司的服务器,进行加载,这样会提升加载的效率. 第二个就是我

【Android应用开发技术:图像处理】Bitmap显示性能优化分析

作者:郭孝星 微博:郭孝星的新浪微博 邮箱:[email protected] 博客:http://blog.csdn.net/allenwells Github:https://github.com/AllenWells [Android应用开发技术:图像处理]章节列表 Bitmap经常会消耗大量内存而导致程序崩溃,常见的异常如下所示:java.lang.OutofMemoryError:bitmap size extends VM budget,因此为了保证程序的稳定性,我们应该小心处理程序

浅谈 html5 兼容性 < IE9 + 的 解决方案 以及 网站 性能优化 的 工具

1> ie-css3.htc                     css3  < IE 9+兼容方式(部分兼容,canvas 不好使)link:http://fetchak.com/ie-css3/2> html5shiv.js                   html5  < IE 9+兼容方式 link:https://github.com/xgqfrms/html5shiv 3>网站 性能优化 tool Yslow + (firefox) firebug lin