• XHProf安装使用笔记


    编译安装

    获取源代码包
    root@sourcjoy>wget http://pecl.php.net/get/xhprof-0.9.2.tgz
    解压

    root@sourcjoy>tar zxf xhprof-0.9.2.tgz
    root@sourcjoy>cd xhprof-0.9.2
    复制web访问目录到web应用目录
    root@sourcjoy>cp -r xhprof_html xhprof_lib /var/www/html/
      #复制xhprof的展示页面目录和库目录到web目录下,可以为xhprof_html建个虚拟目录来访问,也可以把这两个目录拷贝到应用的根目录下。
    root@sourcjoy>cd extension/
    编译插件
    root@sourcjoy>/usr/local/webserver/php/bin/phpize
    root@sourcjoy>./configure --with-php-config=/usr/local/webserver/php/bin/php-config
    root@sourcjoy>make
    root@sourcjoy>make install


    注意:这里安装的时候可能会出现访问php.ini没权限的问题,请把php.ini的权限改成666:
    chmod 666 /usr/local/webserver/php/etc/php.ini

    配置 php.ini 文件
    root@sourcjoy>vi /usr/local/webserver/php/etc/php.ini在合适位置加入以下内容:

    [xhprof]
    extension=xhprof.so
    ;
    ; directory used by default implementation of the iXHProfRuns
    ; interface (namely, the XHProfRuns_Default class) for storing
    ; XHProf runs.
    ;
    ;xhprof.output_dir=<directory_for_storing_xhprof_runs>
    xhprof.output_dir=/var/logs/xhprof

    重启web服务器

    为了更加清晰显示程序执行、调用结构,安装Graphviz,如果安装了Graphviz,XHProf会用比较牛的图形方式展现统计数据。

     sudo yum install libpng-devel 安装png
    获取源码包
    root@sourcjoy>wget http://www.graphviz.org/pub/graphviz/stable/SOURCES/graphviz-2.24.0.tar.gz
    root@sourcjoy>tar zxf graphviz-2.24.0.tar.gz
    root@sourcjoy>cd graphviz-2.24.0
    编译安装
    root@sourcjoy>./configure
    root@sourcjoy>make
    root@sourcjoy>make install

     安装完成后,会生成/usr/local/bin/dot文件,你应该确保路径在PATH环境变量里,以便XHProf能找到它。

    如果出现缺少python错误 可以加入这句话./configure --disable-python.

    加入PATH环境的方法

    1、直接用export命令:

    1
    #export PATH=$PATH:/usr/local/bin/dot

    2、修改profile文件:

    1
    2
    3
    vi /etc/profile
    #在里面加入:
    export PATH="$PATH:/usr/local/bin/dot"

    3. 修改.bashrc文件:

    1
    2
    3
    vi /root/.bashrc
    #在里面加入:
    export PATH="$PATH:/usr/local/bin/dot"

    后两种方法一般需要重新注销系统才能生效,最后可以通过echo命令测试一下:

    1
    echo $PATH

    看看输出里面是不是已经有了/usr/local/bin/dot这个路径了。

    接下来在要统计的php应用中加入以下语句:
    xhprof_enable(); // 统计的代码部分之前加,如果要显示CPU占用 可以加入XHPROF_FLAGS_CPU参数,内存是XHPROF_FLAGS_MEMORY,如果两个一起:XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY,如:xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);

    xhprof_disable();//统计的代码部分之后加

    这样xhprof就可以统计当前页面的函数性能情况了。xhprof会把每次访问加入统计代码的页面的性能统计结果在指定目录下生成一个文件,文件名命名方式为:本次访问的系统ID.命名空间,每次刷新页面都会重新生成一个文件,每个的系统ID都不同。

    然后通过xhprof_html目录的http访问url来查看结果。如:http://app/xhprof_html/?run=运行id&source=命名空间(其中运行ID和命名空间可以根据xhprof生成的文件名来确定)

     拷贝解压目录xhprof-0.9.2 下的 xhprof_html和xhprof_lib到nginx的根目录下面 ,并在根目录建立一个测试文件phpinfo.php。    phpinfo.php内容如下
      <?php
       include_once "xhprof_lib/utils/xhprof_lib.php";  //应用程序所在的目录,生存统计数据用到的类库
       include_once  "xhprof_lib/utils/xhprof_runs.php";//
       xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY); 
       function  test(){
           echo  '测试方法'.'<br>';
       }
        test();
       $xhprof_data = xhprof_disable();
       $xhprof_runs = new XHProfRuns_Default();
       $run_id = $xhprof_runs->save_run($xhprof_data, "xhprof_foo");
       echo "性能报告地址===="."<a href=http://localhost/xhprof_html/index.php?run=$run_id&source=xhprof_foo>点击查看报告</a>";
    ?>

     error:can't find any fonts

     出现这个问题:直接注释掉xhprof_lib/utils/callgraph_util.php里面的 大约在120行

      if (!empty($err)) {
          print "failed to execute cmd: "$cmd". stderr: `$err' ";
          exit;
        }


    名词:
    1. Inclusive Time :包括子函数所有执行时间。
    2. Exclusive Time/Self Time:函数执行本身花费的时间,不包括子树执行时间。
    3. Wall Time:花去了的时间或挂钟时间。
    4. CPU Time:用户耗的时间+内核耗的时间
    5.Inclusive CPU:包括子函数一起所占用的CPU
    6.Exclusive CPU:函数自身所占用的CPU

    最后要说点,这个xhprof程序有点小bug,还不支持php5.2一下的版本,不过这都是小问题,关键是能直观告诉我们程序的性能问题,这个很重要,我们自己开发程序的时候用这个进行性能检查是很不错的。

    Function Name 函数名

    Calls 调用次数

    Calls% 调用百分比

    Incl. Wall Time (microsec) 调用的包括子函数所有花费时间 以微秒算(一百万分之一秒)

    IWall% 调用的包括子函数所有花费时间的百分比

    Excl. Wall Time (microsec) 函数执行本身花费的时间,不包括子树执行时间,以微秒算(一百万分之一秒)

    EWall% 函数执行本身花费的时间的百分比,不包括子树执行时间

    Incl. CPU(microsecs) 调用的包括子函数所有花费的cpu时间。减Incl. Wall Time即为等待cpu的时间

    减Excl. Wall Time即为等待cpu的时间

    ICpu% Incl. CPU(microsecs)的百分比

    Excl. CPU(microsec) 函数执行本身花费的cpu时间,不包括子树执行时间,以微秒算(一百万分之一秒)。

    ECPU% Excl. CPU(microsec)的百分比

    Incl.MemUse(bytes) 包括子函数执行使用的内存。

    IMemUse% Incl.MemUse(bytes)的百分比

    Excl.MemUse(bytes) 函数执行本身内存,以字节算

    EMemUse% Excl.MemUse(bytes)的百分比

    Incl.PeakMemUse(bytes) Incl.MemUse的峰值

    IPeakMemUse% Incl.PeakMemUse(bytes) 的峰值百分比

    Excl.PeakMemUse(bytes) Excl.MemUse的峰值

    EPeakMemUse% EMemUse% 峰值百分比

  • 相关阅读:
    串口基本知识
    20180826
    20180819
    自动化测试
    说话有重点 测试思维
    学习C语言,在软件测试中如何用?
    PC能替代服务器吗?
    服务器与普通电脑的区别?
    k8s 回滚应用
    k8s Service
  • 原文地址:https://www.cnblogs.com/breg/p/3216823.html
Copyright © 2020-2023  润新知