zoukankan      html  css  js  c++  java
  • XHProf的安装和使用(PHP性能测试神器)

    XHProf是Facebook开发的性能调试工具,帮助我们的PHP程序性能调优,更加健壮。XHProf安装和使用方法将在本章讲解。XHProf是PHP的PECL扩展。没有XDeBug那些耗费资源,更加的小巧。
        流程:程序开头打点,结尾打点。那么XHProf机会记录在两个点之间的所有代码响应时所耗费的时间、内存、CPU等各项指标,我们也可以知道一次请求调用了多少次MySQL,多少次Memcache,更加直观的指明优化道路。
        安装:
    ------------下载并编译PHP-XHProf源码------------
    wget http://pecl.php.net/get/xhprof-0.9.4.tgz
    tar -zxvf xhprof-0.9.4.tgz
    cd xhprof-0.9.4
    cd extension
    phpize
    ./configure --enable-xhprof
    make
    make test
    sudo make install
    
    ------------修改php.ini---------------
    sudo vim /etc/php.ini
    #在php.ini最下方加入以下:
    extension=xhprof.so
    xhprof.output_dir="/var/www/xhprof"
    
    -----------重启Apache--------------
    sudo apache restart
    
    进入刚才解压的安装包文件夹中,将xhprof_lib和xhprof_html复制到项目目录下。 接下来,建立一个头文件head.php,这是要打两个点中的开头的点:
    //head.php
    <?php
    if(extension_loaded('xhprof')){
        //载入下载的XHPROF包中的2个文件夹
        include_once 'xhprof_lib/utils/xhprof_lib.php';
        include_once 'xhprof_lib/utils/xhprof_runs.php';
        xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);
    }
    
    再建立一个底部文件foot.php,这是要打两个点中的结尾的点:
    //foot.php
    <?php
    if(extension_loaded('xhprof')){
        $ns = 'myXhprof';
        //关闭profiler
        $xhprofData = xhprof_disable();
        //实例化类
        $xhprofRuns = new XHProfRuns_Default();
        $runId = $xhprofRuns->save_run($xhprofData, $ns);
        //前端展示库的URL
        $url = 'http://localhost/xhprof_html/index.php';
        $url .= '?run=%s&source=%s';
        //变量替换
        $url = sprintf($url, $runId, $ns);
        //输入URL
        echo '<a href="'.$url.'" target="_blank">查看结果</a>';
    }
    
    使用的最后一步:打点。现在我们建立一个测试文件index.php。测试我大Hello World。
    //index.php
    <?php
    include_once 'head.php';
    echo 'Hello World';
    include_once 'foot.php';
    
    可以看到,在http://localhost/index.php中,最下面是我们在foot.php中写的“查看结果”,点击进去,可以看到本次请求所使用到的所有函数的列表,每个函数所耗费的时间、CPU、Memory等信息,点击第一栏可以根据所选排序。点击[View Full Callgraph]可以看到由本列表所生成的流程图,从入口到哪个函数,又到哪个函数,这个函数调用了哪个函数,这个函数调用了多少次Memcache等,一幕了然。减少MC的调用,减少这个,减少那个,请求的响应速度能不快吗? 技巧: 我有1000个文件,现在我需要用XHProf检测一下我整个项目,难道要每个文件头部和尾部都要加上include吗? 在php.ini中添加:
    auto_prepend_file = /var/www/head.php
    auto_append_file = /var/www/foot.php
    
    或者在.htaccess中添加
    php_value auto_prepend_file = /var/www/head.php
    php_value auto_append_file = /var/www/foot.php
    
    报错: 1、点击[View Full Callgraph]查看图片的时候报错:failed to execute cmd:" dot -Tpng". stderr:`sh: dot:command not found`。 原因:原因:未安装图形化工具 解决:
    //红帽系列
    yum install graphviz
    //Ununtu
    apt-get install graphviz
    //OS X
    brew install graphviz
  • 相关阅读:
    JavaScript 为字符串添加样式 【每日一段代码80】
    JavaScript replace()方法 【每日一段代码83】
    JavaScript for in 遍历数组 【每日一段代码89】
    JavaScript 创建用于对象的模板【每日一段代码78】
    html5 css3 新元素简单页面布局
    JavaScript Array() 数组 【每日一段代码88】
    JavaScript toUTCString() 方法 【每日一段代码86】
    位运算
    POJ 3259 Wormholes
    POJ 3169 Layout
  • 原文地址:https://www.cnblogs.com/cnsanshao/p/7087476.html
Copyright © 2011-2022 走看看