• 技术文章 >php教程 >php手册

    php轻量级的性能分析工具xhprof的安装使用

    2016-06-06 19:48:39原创284

    之前一直使用基于Xdebug进行PHP的性能分析,对于本地开发环境来说是够用了,但如果是线上环境的话,xdebug消耗较大,配置也不够灵活,因此线上环境建议使用xhpro

    一、前言

      有用的东西还是记录下来吧,也方便以后的查询;这次记录一下xhprof的安装使用;

      xhprof是facebook开源出来的一个php轻量级的性能分析工具,跟Xdebug类似,但性能开销更低,

      还可以用在生产环境中,也可以由程序开 关来控制是否进行profile。

    二、安装

    wget tar zxf xhprof-0.9.3.tgz cd xhprof-0.9.3/extension /usr/bin/phpize (php版本安装后生成的phpize文件,可根据phpinfo查看,所以php版本不同,生成的phpize也不同,此步骤主要生成configure文件) ./configure –with-php-config=/usr/bin/php-config (php-config的路径,也是php安装后生成的文件) make sudo make install

    (会自动将生成的扩展文件拷贝到扩展目录中/usr/lib64/php/modules)

    当然具体的php文件的目录,每个人不尽相同,可根据phpinfo查询

    三、php.ini配置

    根据phpinfo找到 extension_dir的目录
    (/etc/php.d/xhprof.ini)

    添加一下内容:

    extension=xhprof.so xhprof.output_dir=/tmp/xhprof //xhprof的分析日志

    四、重启服务

    sudo /etc/init.d/http restart

    查看phpinfo是否安装成功

    五、使用方法

    开头: xhprof_enable(); //开启监测 //xhprof_enable(XHPROF_FLAGS_NO_BUILTINS); 不记录内置的函数 //xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY); 同时分析CPU和Mem的开销 //要测试的代码 ... ... ... 结尾: $xhprof_data = xhprof_disable(); //停止监测,返回运行数据 $xhprof_root = '/(xhprof的虚拟主机目录)/'; //引入当初安装到xhprof虚拟主机目录中的文件 include_once $xhprof_root."xhprof_lib/utils/xhprof_lib.php"; include_once $xhprof_root."xhprof_lib/utils/xhprof_runs.php"; $xhprof_runs = new XHProfRuns_Default(); $run_id = $xhprof_runs->save_run($xhprof_data, "xhprof"); echo 'xhprof统计';

      上边的代码使用了,给xhprof设置虚拟主机的方法。

      把源码包中的 xhprof_html 和 xhprof_lib 文件夹拷贝到自己建立的虚拟目录中

      cp -r xhprof_html xhprof_lib /xxx/xhprof/ (此处目的是建立数据分析目录,可将此目录配置成虚拟主机访问)

      运行后,统计点击返回的 xhprof统计 链接,即可。

    六、注意问题以及名词解释

      在显示的统计页面中,点[View Full Callgraph]图形化显示(最大的性能问题会用红色标出,其次是黄色);

      点击后,可能提示错误消息,执行以下命令即可

    yum install -y graphviz yum install graphviz-gd

      名词解释

    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% 峰值百分比

    xhprof的安装与简易用法

    xhprof是Facebook开源的轻量级PHP性能分析工具,Linux环境下可以通过pecl直接安装,比如在Ubuntu下仅需3行指令

    pecl install xhprof-beta echo "extension=xhprof.so" > /etc/php5/fpm/conf.d/xhprof.ini service php5-fpm restart

    之后可以通过phpinfo()检查扩展是否已经加载。

    具体如何使用呢,xhprof项目中已经提供了示例以及简易的UI,下载xhprof项目到web服务器,假设可以通过访问,那么访问可以看到一些输出,并且提示通过访问查看结果。接下来访问就可以看到已经保存的结果,列出了所有函数的调用以及所消耗的时间。

    分析一下示例代码sample.php,关键部分只有2行:

    //开启xhprof并开始记录 xhprof_enable(); //运行一些函数 foo(); //停止记录并取到结果 $xhprof_data = xhprof_disable();

    $xhprof_data中记录了程序单步运行过程中所有的函数调用时间及CPU内存消耗等,具体记录哪些指标可以通过xhprof_enable的入口参数控制,之后的处理已经与xhprof扩展无关,大致是编写了一个存储类XHProfRuns_Default,将$xhprof_data序列化并保存到某个目录,可以通过XHProfRuns_Default(__DIR__)将结果输出到当前目录,如果不指定则会读取php.ini配置文件中的xhprof.output_dir,仍然没有指定则会输出到/tmp。

    xhprof_html/index.php将记录的结果整理并可视化,默认的UI里列出了:
    •funciton name : 函数名
    •calls: 调用次数
    •Incl. Wall Time (microsec): 函数运行时间(包括子函数)
    •IWall%:函数运行时间(包括子函数)占比
    •Excl. Wall Time(microsec):函数运行时间(不包括子函数)
    •EWall%:函数运行时间(不包括子函数)

    每一项应该不难理解,以项目自带的sample.php为例,示例中编写了一个main()函数,main()函数中调用foo()、bar()等一些子函数进行了一点字符处理。整个程序运行过程中,main()函数只运行了一次,并且由于main()函数中包括了所有的逻辑,所以main()函数的IWall%占比为100%,但是由于main()函数的功能都是由子函数实现的,因此main()函数的EWall%只有0.3%,,而foo()函数完成了主要的工作,EWall%有98.1%。因此在分析更大型的程序时,往往需要根据这几项指标分别排序,从不同的角度审视性能消耗。

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    上一篇:PHP获取一年有几周以及每周开始日期和结束日期 下一篇:简单介绍win7下搭建apache+php+mysql开发环境
    PHP编程就业班

    相关文章推荐

    • 无限级别菜单的实现(其实还是有限级别的^0^)• PHP session信息存储到数据库的类• php页面跳转的几种实现方法• PHP5.5迭代生成器用法实例详解,php5.5生成器• php使用curl获取https请求的方法

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网