转:使用XHProf优化PHP程序
原文来自于:http://blog.sina.com.cn/s/blog_665fc8980100l8dq.html
XHProf 是 FaceBook 开发的一个函数级别的 PHP 分层分析器。
数据收集部分是一个基于 C 的 PHP 扩展,分析报告是一系列基于 PHP 的 HTML 导航页面。
XHProf 能统计每个函数的调用次数、内存使用、CPU占用等多项重要的数据。
并且 XHProf 还能比较两个统计样本,或从多个数据样本中汇总结果。
XHProf 是分析 PHP 程序执行效率的利器,能让我们得到更底层的的分析数据。
安装 XHProf
XHProf 目前的最新版本是 0.92,你可以从它的主页(http://pecl.php.net/package/xhprof)下载它的最新版本。
例如,我的 Web 目录是 /data/zivn.me,那么我可以通过下面的命令来安装 XHProf 。
查看源代码
打印?
1 wget http://pecl.php.net/get/xhprof-0.9.2.tgz
2 tar zxf xhprof-0.9.2.tgz
3 cd xhprof-0.9.2
4 cp -r xhprof_html xhprof_lib /data/zivn.me/
5 cd extension
6 phpize
7 ./configure
8 make
9 make install
当然,我们还需要修改 php.ini 来确保 XHProf 的正常运行。
我们需要先建立一个目录用来存储分析数据文件,例如 /data/zivn.me/xhprof/。
查看源代码
打印?
1 [xhprof]
2 extension=xhprof.so
3 xhprof.output_dir=/data/zivn.me/xhprof/
使用 XHProf
使用 XHProf 非常简单,我们只需要修改少许代码即可实现。
例如,我们需要分析代码执行时关于 CPU 和内存的数据。
查看源代码
打印?
01 xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);
02
03 // Test Code Start
04 …………
05 // Test Code End
06
07 $xhprofData = xhprof_disable();
08
09 include_once "/data/zivn.me/xhprof_lib/utils/xhprof_lib.php";
10 include_once "/data/zivn.me/xhprof_lib/utils/xhprof_runs.php";
11
12 $xhprofRuns = new XHProfRuns_Default();
13 $xhprofRuns->save_run($xhprofData, "xhprof");
这样,当我们运行程序之后,会在 /data/zivn.me/xhprof/ 之中生成分析数据文件。
文件名类似于 4b4c239a86593.xhprof ,我们可以通过改变 save_run 的参数,来改变文件后缀。
由于分析可能会影响响应速度,通常我们会加上一个随机数,随机取样,而不是分析所有用户请求的执行过程。
查看源代码
打印?
01 $randKey = mt_rand(1, 10000);
02
03 if ($randKey == 1)
04 {
05 xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);
06 }
07
08 // Test Code Start
09 …………
10 // Test Code End
11
12 if ($randKey == 1)
13 {
14 $xhprofData = xhprof_disable();
15
16 include_once "/data/zivn.me/xhprof_lib/utils/xhprof_lib.php";
17 include_once "/data/zivn.me/xhprof_lib/utils/xhprof_runs.php";
18
19 $xhprofRuns = new XHProfRuns_Default();
20 $xhprofRuns->save_run($xhprofData, "xhprof");
21 }
查看 XHProf 分析数据
例如,我的域名是 zivn.me,现在我们就可以通过 web 来查看详细的分析数据了。
转:使用XHProf优化PHP程序的更多相关文章
- PHP扩展--XHProf优化PHP程序
简介 XHProf 是一个轻量级的分层性能测量分析器. 在数据收集阶段,它跟踪调用次数与测量数据,展示程序动态调用的弧线图. 它在报告.后期处理阶段计算了独占的性能度量,例如运行经过的时间.CPU 计 ...
- 怎么优化JAVA程序的执行效率和性能?
现在java程序已经够快的了,不过有时写出了的程序效率就不怎么样,很多细节值得我们注意,比如使用StringBuffer或者StringBuilder来拼接或者操作字符串就比直接使用String效率高 ...
- 10个技巧优化PHP程序Laravel 5框架
10个技巧优化PHP程序Laravel 5框架 性能一直是 Laravel 框架为人诟病的一个点,所以调优 Laravel 程序算是一个必学的技能. 接下来分享一些开发的最佳实践www.itxdl.c ...
- 一步步做程序优化-讲一个用于OpenACC优化的程序(转载)
一步步做程序优化[1]讲一个用于OpenACC优化的程序 分析下A,B,C为三个矩阵,A为m*n维,B为n*k维,C为m*k维,用A和B来计算C,计算方法是:C = alpha*A*B + beta* ...
- 如何优化cocos2d程序的内存使用和程序大小
在我完成第一个游戏项目的时候,我深切地意识到"使用cocos2d来制作游戏的开发者们,他们大多会被cocos2d的内存问题所困扰".而我刚开始接触cocos2d的时候,社区里面的人 ...
- 【转】优化Web程序的最佳实践
自动排版有点乱,看着蛋疼,建议下载中文PDF版阅读或阅读英文原文. Yahoo!的Exceptional Performance团队为改善Web性能带来最佳实践.他们为此进行了 一系列的实验.开发了各 ...
- 优化PHP程序的方法(温故知新)
1. If a method c++an be static, declare it static. Speed improvement is by a factor of 4. 如果一个方法可静态化 ...
- (译)如何优化cocos2d程序的内存使用和程序大小:第二部分(完)
前言:从上周发布教程的微博反应情况来看,cocos2der们对于游戏的内存问题还是非常关心的.本文是上一篇博文的续,旨在教大家如何减少cocos2d程序的大小. 全文如下: 减少你的程序的大小 把纹理 ...
- 如何优化cocos2d程序的内存使用和程序大小:第一部分
译者: 在我完成第一个游戏项目的时候,我深切地意识到“使用cocos2d来制作游戏的开发者们,他们大多会被cocos2d的内存问题所困扰”.而我刚开始接触cocos2d的时候,社区里面的人们讨论了一个 ...
随机推荐
- Android程序的入口点和全局变量设置--application
首先看看 application的官方文档 我之前一直以为Android程序的入口点就是带MAIN和LAUNCHER的Activity的onCreate方法,看来我是错了~ 原来真正的入口点是 Ap ...
- Ken Norton和软件工程师打交道的10个秘诀
How to work with software engineers - by Ken Norton Deflect praise Absorb blame Sweat the details In ...
- Open-source Project官方地址
非常遗憾因为这篇博文是专门搜集各个开源项目的各种官方连接地址的,所以链接较多,csdn不同意保存. 请点击这里下载. 因为我的积分不多了,所以这个文档须要一个积分..应该不多吧...确实没有积分的童鞋 ...
- rsync是类unix系统下的数据镜像备份工具
http://baike.baidu.com/view/1183189.htm Ubuntu安装: sudo apt-get install rsync RedHat: yum install r ...
- 内存管理概述、内存分配与释放、地址映射机制(mm_struct, vm_area_struct)、malloc/free 的实现
http://blog.csdn.net/pi9nc/article/details/23334659 注:本分类下文章大多整理自<深入分析linux内核源代码>一书,另有参考其他一些资料 ...
- 在Mac OS 中显示和隐藏系统文件
使用终端 输入以下代码 defaults write com.apple.finder AppleShowAllFiles -bool YES 来显示隐藏了的文件 如usr/bin 把YES改成NO ...
- WWDC心愿单:新版OS X或将有这些变化
每年的WWDC开发者大会上苹果都会展示最新的软件研发成果,在新一代MacBook Pro和MacBook Air笔记本到来之前,我们不妨来期待下新版OS X会有怎样的变化. Siri入驻Mac 此 ...
- Android AppWidget(转)
AppWidget不知道大家使用这个多不多,这个在手机上也叫做挂件,挂件也就是放在桌面方便用户进行使用的,从android1.6开始挂件支持一些简单的lauout和view,到了android4.0之 ...
- HDU 5105 Math Problem
让求 f(x)=|a∗x3+b∗x2+c∗x+d|(L≤x≤R)的最大值 这个题目讨论a和b的值,如果a==0的话,那么这个方程就变成了一个一元二次方程,直接找端点和对称轴(如果对称轴在给定的区间内 ...
- C#学习第五天
字符串的处理 string可作char的只读数组 下面这段字符表示访问每个字符: string myString="A string."; char myChar=myString ...