原文来自于: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程序的更多相关文章

  1. PHP扩展--XHProf优化PHP程序

    简介 XHProf 是一个轻量级的分层性能测量分析器. 在数据收集阶段,它跟踪调用次数与测量数据,展示程序动态调用的弧线图. 它在报告.后期处理阶段计算了独占的性能度量,例如运行经过的时间.CPU 计 ...

  2. 怎么优化JAVA程序的执行效率和性能?

    现在java程序已经够快的了,不过有时写出了的程序效率就不怎么样,很多细节值得我们注意,比如使用StringBuffer或者StringBuilder来拼接或者操作字符串就比直接使用String效率高 ...

  3. 10个技巧优化PHP程序Laravel 5框架

    10个技巧优化PHP程序Laravel 5框架 性能一直是 Laravel 框架为人诟病的一个点,所以调优 Laravel 程序算是一个必学的技能. 接下来分享一些开发的最佳实践www.itxdl.c ...

  4. 一步步做程序优化-讲一个用于OpenACC优化的程序(转载)

    一步步做程序优化[1]讲一个用于OpenACC优化的程序 分析下A,B,C为三个矩阵,A为m*n维,B为n*k维,C为m*k维,用A和B来计算C,计算方法是:C = alpha*A*B + beta* ...

  5. 如何优化cocos2d程序的内存使用和程序大小

    在我完成第一个游戏项目的时候,我深切地意识到"使用cocos2d来制作游戏的开发者们,他们大多会被cocos2d的内存问题所困扰".而我刚开始接触cocos2d的时候,社区里面的人 ...

  6. 【转】优化Web程序的最佳实践

    自动排版有点乱,看着蛋疼,建议下载中文PDF版阅读或阅读英文原文. Yahoo!的Exceptional Performance团队为改善Web性能带来最佳实践.他们为此进行了 一系列的实验.开发了各 ...

  7. 优化PHP程序的方法(温故知新)

    1. If a method c++an be static, declare it static. Speed improvement is by a factor of 4. 如果一个方法可静态化 ...

  8. (译)如何优化cocos2d程序的内存使用和程序大小:第二部分(完)

    前言:从上周发布教程的微博反应情况来看,cocos2der们对于游戏的内存问题还是非常关心的.本文是上一篇博文的续,旨在教大家如何减少cocos2d程序的大小. 全文如下: 减少你的程序的大小 把纹理 ...

  9. 如何优化cocos2d程序的内存使用和程序大小:第一部分

    译者: 在我完成第一个游戏项目的时候,我深切地意识到“使用cocos2d来制作游戏的开发者们,他们大多会被cocos2d的内存问题所困扰”.而我刚开始接触cocos2d的时候,社区里面的人们讨论了一个 ...

随机推荐

  1. 使用JAVA与SmartFoxServer来实现游戏服务器概述

    SmartFoxServer 是专门为Adobe Flash设计的跨平台socket服务器,让开发者高效地开发多人应用及游戏. 该服务器主要用来创建多玩家游戏.并提供强大的制作工具,各种回合制游戏和实 ...

  2. Greenplum 数据库架构分析

    Greenplum 数据库是最先进的分布式开源数据库技术,主要用来处理大规模的数据分析任务,包括数据仓库.商务智能(OLAP)和数据挖掘等.自2015年10月正式开源以来,受到国内外业内人士的广泛关注 ...

  3. DBCP,C3P0,Tomcat_JDBC 性能及稳定性测试

    1.测试环境: 硬件环境: 数据库服务器:2U*8核 8G内存 测试服务器:   2U*8核 6G内存 软件环境: jdk: 1.6.29 mysql: 5.0.77 mysql_driver: my ...

  4. Linux Kernel: buffers和cached的区别

    The page cache caches pages of files to optimize file I/O. The buffer cache caches disk blocks to op ...

  5. MyEclipse 安装SVN插件方法及插件下载地址

    直接解压法 下载地址:http://subclipse.tigris.org/servlets/ProjectDocumentList?folderID=2240下载SVN插件:site-1.x.x. ...

  6. Python之路,Day4 - Python基础4 (new版)

    Python之路,Day4 - Python基础4 (new版)   本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 ...

  7. Web开发 < base target>

    target就是点击链接后跳转到的目标页.通俗点说,就是你当前页面上的链接<a>,也包括<img>.<link>.<form>,除非你指定了target ...

  8. 通过ip地址获取当前地理位置

    1.  使用接口的方式: 这种方式是相对稳定,而且提供的数据相对稳定,提供接口的地方很多,大家可以参照 http://www.hujuntao.com/api/the-ip-address-api-a ...

  9. linux下系统定时任务配置----crontab(mysql定时备份)

    crontab命令用于设置周期性被执行的指令,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任 ...

  10. Nginx反向代理配置配置实例

    为了节省支出,公司需要将分布在不同机器的站点都迁移到一台机器,而目前不同机器运行的是不同的web服务,部分是nginx,部分是apache,由于牵涉较多rewrite规则,为了节省修改功夫,打算迁移后 ...