大型网站调试工具之一(php性能优化分析工具XDebug)
一、安装配置
1、下载PHP的XDebug扩展,网址:http://xdebug.org/
2、在Linux下编译安装XDebug
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所在位置。
修改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"
- [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"
- [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"
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函数的内容如下:
- 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;
- }
- }
- 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;
- }
- }
- 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次。

(5)可能造成瓶颈的原因:
要过滤的156个关键字逐行存放在/usr/local/apache/template/tags/forbidden_tags.txt文件中,文本数据库的效率不高。
逐行读取函数fgets、以及去除字符串两边的空白或者指定的字符的函数trim在高负载下的效率低,可以测试fopen、fread、fscanf之类的文件读取函数,对比一下。
大型网站调试工具之一(php性能优化分析工具XDebug)的更多相关文章
- golang 性能优化分析:benchmark 结合 pprof
前面 2 篇 golang 性能优化分析系列文章: golang 性能优化分析工具 pprof (上) golang 性能优化分析工具 pprof (下) 一.基准测试 benchmark 简介 在 ...
- Android 性能优化之工具和优化点总结
Android性能优化学习 最近公司主抓性能优化工作,借此春风也学习到了许多Android性能优化方面的知识.由于组内队友的给力,优化的成果也是比较喜人.同时也学习和实践了不少知识,特此记录. 1.性 ...
- SQL SERVER 查询性能优化——分析事务与锁(五)
SQL SERVER 查询性能优化——分析事务与锁(一) SQL SERVER 查询性能优化——分析事务与锁(二) SQL SERVER 查询性能优化——分析事务与锁(三) 上接SQL SERVER ...
- 一次 group by + order by 性能优化分析
一次 group by + order by 性能优化分析 最近通过一个日志表做排行的时候发现特别卡,最后问题得到了解决,梳理一些索引和MySQL执行过程的经验,但是最后还是有5个谜题没解开,希望大家 ...
- Linux 性能优化排查工具
下图1为 Linux 性能优化排查工具的总结 图1 诊断 CPU 工具 查看 CPU 核数 总核数 = 物理CPU个数 X 每颗物理CPU的核数 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU ...
- 针对特定网站scrapy爬虫的性能优化
在使用scrapy爬虫做性能优化时,一定要根据不同网站的特点来进行优化,不要使用一种固定的模式去爬取一个网站,这个是真理,以下是对58同城的爬取优化策略: 一.先来分析一下影响scrapy性能的set ...
- 如何更有效使用 Rational AppScan 扫描大型网站,第 2 部分: 案例分析
使用 AppScan 进行扫描 针对大型网站的扫描,我们按照戴明环 PDCA 的方法论来进行规划和讨论,建议 AppScan 使用步骤:计划(Plan).执行(Do).检查(check).分析(Ana ...
- ubifs性能优化分析
本文通过分析ubifs的mount.read.write和commit流程,挖掘ubifs背后的设计决策和性能优化手段,并结合自身产品的特点,给出一些读写性能改进方案. 1. ubifs ...
- MySQL索引及性能优化分析
一.SQL性能下降的原因 查询语句问题,各种连接.子查询 索引失效(单值索引.复合索引) 服务器调优及各个参数设置(缓冲.线程池等) 二.索引 排好序的快速查找数据结构 1. 索引分类 单值索引 一个 ...
随机推荐
- python发起请求提示UnicodeEncodeError
具体错误: UnicodeEncodeError: 'latin-1' codec can't encode characters in position 73-74: Body ('测试') is ...
- Visual Studio 2015安装包
点击下载
- Truffle3.0集成NodeJS并完全跑通(附详细实例,可能的错误)
Truffle3.0集成NodeJS并完全跑通(附详细实例,可能的错误) Truffle3.0集成NodeJS并完全跑通(附详细实例,可能的错误) 升级到Truffle3.0 如果之前安装的是Truf ...
- 用express搭建一个简单的博客系统
转自:https://blog.csdn.net/qq_29721837/article/details/62055603 Express 简介 Express 是一个简洁而灵活的 node.js W ...
- Python中运算符"=="和"is"的差别分析
前言 在讲is和==这两种运算符区别之前,首先要知道Python中对象包含的三个基本要素,分别是:id(身份标识).python type()(数据类型)和value(值).is和==都是对对象进行比 ...
- HDU 1005 Wooden Sticks
http://acm.hdu.edu.cn/showproblem.php?pid=1051 Problem Description There is a pile of n wooden stick ...
- 好用的在线pdf转化器
https://smallpdf.com/cn/compress-pdf
- media="screen"是什么意思?
<link rel="stylesheet" href="css/main.css" type="text/css" media=&q ...
- G D 3 2 预 处 理 符 号 配 置 中 定 义
Is mainly used in MCU and peripherals to choose, without having to modify macro definitions in the c ...
- [SCOI2010]序列操作 线段树
---题面--- 题解: 在考场上打的这道题,出人意料的很快就打完了?! 直接用线段树,维护几个东西: 1,lazy标记 : 表示区间赋值 2,mark标记:表示区间翻转 3,l1:前缀最长连续的1的 ...