Xhprof php性能测试工具用法小结

简介

改进php应用程序的性能是一项很是耗时耗力的工做,可是究竟程序中是哪些函数消耗掉了大部分执行时间,这一般都不是很是明显的。php

Xhprof 是facebook推出的轻量级的php性能分析工具,下面简单介绍下Xhprof的安装及使用。html

准备

  1. 下载:
    https://pecl.php.net/package/xhprof xhprof-0.9.4.tgz 官网
  2. 展现图形界面须要
    yum install graphviz.

安装

  1. 编译扩展
wget https://pecl.php.net/get/xhprof-0.9.4.tgz
 tar xzf xhprof-0.9.4.tgz
 cd xhprof-0.9.4
 cd extension
 /usr/local/bin/phpize 
 ./configure --with-php-config=/usr/local/bin/php-config
 make && make install

输入图片说明

  1. 增长如下代码到php.ini文件中
[xhprof]
extension=/usr/local/lib/php/extensions/no-debug-non-zts-20121212/xhprof.so
xhprof.output_dir="/www/xhprof"
  1. 重启 php
service php-fpm restart

输入图片说明
xhprof安装成功
4. 拷贝文件 解压后的_xhprof-0.9.4_目录下有两个目录_xhprof_html_,_xhprof_lib_须要用到,拷贝到网站目录web

cd xhprof-0.9.4
  cp xhprof_* -R /www

使用

  1. 简单示例
    _xhprof-0.9.4_目录下 有个examples目录,有个sample.php示例能够参考下,下面列出个简单用法流程
//开始分析
//XHPROF_FLAGS_CPU 使输出的性能数据中添加 CPU 数据。
//XHPROF_FLAGS_MEMORY 使输出的性能数据中添加内存数据。
//XHPROF_FLAGS_NO_BUILTINS (integer) 使得跳过全部内置(内部)函数。
//若是都监控多个能够用XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY
xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);
//程序代码执行
 ......
include_once "xhprof_lib/utils/xhprof_lib.php";   
include_once "xhprof_lib/utils/xhprof_runs.php";   
$namespace = 'demo';
// 中止分析,获取数据,保存数据
$xhprof_data = xhprof_disable();
$xhprof_runs = new XHProfRuns_Default();
$run_id = $xhprof_runs->save_run($xhprof_data, $namespace);
//查看运行结果的url  
//run_id,source
//localhost 用本身的域名替换 
echo "http://localhost/xhprof_html/index.php?run=".$run_id."&source=".$namespace;
  1. 更好的方式
    要分析现有的项目,不可能修改项目的源代码,因此咱们能够利用php的auto_prepend_fileregister_shutdown_function来注入代码,在这里咱们用auto_prepend_file方式来示例. 增长如下代码到php.ini文件中
auto_prepend_file = "/data/www/header.php"
auto_append_file =  "/data/www/footer.php"

header.php 文件内容cookie

$xhprof_switch = false;
//为了减小性能开销,1000次只有一次进行性能采集
//判断cookie的值,能够方便灰度测试
if (isset($_COOKIE['xhprof_on'])) {
    $xhprof_switch = true;
} else {
    if (mt_rand(1, 1000) === 1) {
        $xhprof_switch = true;
    }
}
if ($xhprof_switch) {
   if (extension_loaded('xhprof')) {
       include_once '/www/xhprof_lib/utils/xhprof_lib.php';
       include_once '/www/xhprof_lib/utils/xhprof_runs.php';
       xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);
   }
}

footer.php 文件内容app

if ($xhprof_switch && extension_loaded('xhprof')) {
     $namespace = 'demo';
     $xhprof_data = xhprof_disable();
     $xhprof_runs = new XHProfRuns_Default();
     $run_id = $xhprof_runs->save_run($xhprof_data, $namespace);
}
  1. 图形界面 源代码中的_xhprof_html_目录咱们已经放到web目录了,直接进行访问http://xxx/xhprof_html/index.php 能够看到图形界面了,点击一个列表进去就能够看到以下统计表格了 输入图片说明函数

    Wall Time:总执行时间php-fpm

    CUP Time:CPU占用时间工具

    Memory Usage:内存占用率性能

    Peak Memory Usage:内存峰值测试

    Number of Calls:方法的调用次数

    点击 Callgraph 能够看到酷酷的图形展现

扩展阅读

相关文章
相关标签/搜索