zoukankan      html  css  js  c++  java
  • xhprof学习笔记

    一、简介

    XHProf 是一个轻量级的分层性能测量分析器。 在数据收集阶段,它跟踪调用次数与测量数据,展示程序动态调用的弧线图。 它在报告、后期处理阶段计算了独占的性能度量,例如运行经过的时间、CPU 计算时间和内存开销。 函数性能报告可以由调用者和被调用者终止。 在数据搜集阶段 XHProf 通过调用图的循环来检测递归函数,通过赋予唯一的深度名称来避免递归调用的循环。

    XHProf 包含了一个基于 HTML 的简单用户界面(由 PHP 写成)。 基于浏览器的用户界面使得浏览、分享性能数据结果更加简单方便。 同时也支持查看调用图。

    XHProf 的报告对理解代码执行结构常常很有帮助。 比如此分层报告可用于确定在哪个调用链里调用了某个函数。

    XHProf 对两次运行进行比较(又名 "diff" 报告),或者多次运行数据的合计。 对比、合并报告,很像针对单次运行的“平式视图”性能报告,就像“分层式视图”的性能报告。

    更多额外文档可以在 » facebook xhprof 上找到。

     

    二、安装/配置

    1. 安装xhprof

    1. wget http://pecl.php.net/get/xhprof-0.9.2.tgz  
    2. tar zxvf  xhprof-0.9.2.tgz  
    3. cp ./xhprof-0.9.2.tgz ./www         //xhprof自身带有一个web版的分析页面,放到我的web服务器下面  
    4. cd xhprof-0.9.2/extension  
    5. /usr/local/php/bin/phpize  
    6. ./configure --enable-xhprof --with-php-config=/usr/local/php/bin/php-config  //php安装目录
    7. make && make install  

    2. 安装graphviz,一个画图工具
    wget http://www.graphviz.org/pub/graphviz/stable/SOURCES/graphviz-2.24.0.tar.gz
    tar zxf graphviz-2.24.0.tar.gz
    cd graphviz-2.24.0
    ./configure
    make && make install

    遇到的错误
    1)Error: either we can not find profile data for run_id 4d7f0bd99a12f or the threshold 0.01 is too small or you do not have ‘dot’ image generation utility installed.
    解决绘图工具GOOGLE了半天找了一片文章说:xhprof绘制的是png图,系统(graphviz-2.24.0)不支持。才知道绘图的dot拓         展没装成功。我的操作系统是CENTOS5.5的,也就是dot 不支持PNG。

    3. 配置

    1. [xhprof]  
    2.  extension=xhprof.so  
    3.  xhprof.output_dir=/home/zhangy/xhprof  //如果不加存放目录的话,默认是放在/tmp下面  
    4. 将解压后的xhprof_html和xhprof_lib两个文件复制到apache的www目录下,www目录为服务器设置的访问路径

    三、XHProf测试

    前面我们说过了,XHProf自身带有一个web版的测试工具,里面还有一个小例子。看一下这个例子,我做了一点修改和注释

    1. <?php  
    2. function bar($x) {  
    3.  if ($x > 0) {  
    4.  bar($x -1);  
    5.  }  
    6. }  
    7. function foo() {  
    8.  for ($idx = 0; $idx < 5; $idx++) {  
    9.  bar($idx);  
    10.  $x = strlen("abc");  
    11.  }  
    12. }  
    13.   
    14. //启动xhprof  
    15. xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);  
    16.   
    17. //调用foo函数,也是我们要分析的函数  
    18. foo();  
    19.   
    20. //停止xhprof  
    21. $xhprof_data = xhprof_disable();  
    22.   
    23. //取得统计数据  
    24. print_r($xhprof_data);  
    25.   
    26. $XHPROF_ROOT = realpath(dirname(__FILE__) . '/..');  
    27. include_once $XHPROF_ROOT . "/xhprof_lib/utils/xhprof_lib.php";  
    28. include_once $XHPROF_ROOT . "/xhprof_lib/utils/xhprof_runs.php";  
    29.   
    30. //保存统计数据,生成统计ID和source名称  
    31. $xhprof_runs = new XHProfRuns_Default();  
    32. $run_id = $xhprof_runs->save_run($xhprof_data"xhprof_foo"); //source名称是xhprof_foo  
    33.   
    34. //弹出一个统计窗口,查看统计信息  
    35. echo "<script language='javascript'>window.open('../xhprof_html/index.php?run=" . $run_id . "&source=xhprof_foo');</script>";  
    36. ?>  

    运行程序,底部出现统计字样,点过去就可以看到性能分析了。按运行时间排序,很容易找出化时间最长的函数。
    点[View Full Callgraph]图形化显示,最大的性能问题会用红色标出,其次是黄色,很明显。以下是部分的结果:

    1. [foo==>bar] => Array  
    2.  (  
    3.  [ct] => 5       //bar()这个函数被调用了5次  
    4.  [wt] => 63      //每次运行bar()所要的时间,不知道这个是不是平均值  
    5.  [cpu] => 0      //每次运行bar(),cpu运算时间  
    6.  [mu] => 2860    //每次运行bar(),php所使用内存的改变  
    7.  [pmu] => 0      //每次运行bar(),php在内存使用最高峰时,所使用内存的改变  
    8.  )  
  • 相关阅读:
    angular、vue使用感受
    API网关在API安全性中的作用
    分享一个国内首个企业级开源的GO语言网关--GoKu API Gateway
    几种部署Goku API Gateway的方式,最快一分钟可使用上网关
    热门开源网关的性能对比:Goku > Kong > Tyk
    如何通过网关做服务编排?
    未来实现API管理系统的几个关键词
    关于未来实现API管理系统的几个关键词
    让API实现版本管理的实践
    医疗行业如何使用API市场?
  • 原文地址:https://www.cnblogs.com/penghaibo/p/3627220.html
Copyright © 2011-2022 走看看