zoukankan      html  css  js  c++  java
  • 安装XHProf分析PHP性能瓶颈(原创)

    废话不多说,直接上代码 ,手动滑稽。o(╯□╰)o   如果已解决您的问题,请在文章底部点击下关注,非常感谢。

    下面是LINUX命令行

    $ 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 --with-php-config=/usr/local/php/bin/php-config   //在这个地方,很多教程是错误的,只有./configure这个,事实是如果只敲./configure会报错。o(╯□╰)o   当然我使用的是ubantu16.04版本,如果是其他版本的话,看看对应的配置文件位置。
    $ make
    $ sudo make install

    LINUX命令行修改php.ini 一般是在/usr/local/php/etc路径下。php.ini加入如下配置:ps不用怀疑就是这么简单

    [xhprof]
    extension=xhprof.so
    xhprof.output_dir=/tmp

    重启Apache,然后去网站根目录运行phpinfo()函数,出现以下内容,说明扩展生效:

    有了这个扩展后,就可以用这个扩展的内置函数进行分析性能了:

    有了这个扩展后,就能在自己的php代码中调用这个扩展内置的函数来做性能监控了,像下面这样子
    xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);
        ................这里是要被监控的代码块
    $data = xhprof_disable();
    
    include_once "xhprof_lib/utils/xhprof_lib.php";  
    include_once "xhprof_lib/utils/xhprof_runs.php";  
    $objXhprofRun = new XHProfRuns_Default();//数据会保存在php.ini中xhprof.output_dir设置的目录去中 
    $run_id = $objXhprofRun->save_run($data, "test");

    接下来就是使用的问题了  ps请关注我的博客,博客不在老,而在于是否有没有准确的干货。

    加下来怎么使用要干3件事:

    1:安装作图工具,命令行如下:

    sudo apt-get install graphviz     //安装途中如果出现error,不用管。

    2、移动资源文件,在最初下载的xhprof-0.9.4.tgz解压目录里有两个文件夹xhprof_html和xhprof_lib都复制到网站根目录下,只要能被http访问到就可以了:

    把这两个文件夹复制到www目录下,复制命令就省略了。

    3、在www目录下,新建一个文件test.php测试代码命名如下,加入以下代码:ps代码不用作任何修改,除非你明白怎么回事,大神忽略。

        浏览器访问一下test.php文件,比如我本地localhost/test.php 

    <?php
    error_reporting(-1);
    
    
    xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);
     
    $begin_time = microtime_float();
    
    //统计执行速度代码
    $end_time = microtime_float();
    
    $exec_time  = $end_time-$begin_time;
    
    //@save_stat($exec_time);
    
    for($i=0;$i<10;$i++){
      for($j=0;$j<10;$j++){
      }
    }
    $data = xhprof_disable();
    include_once "xhprof_lib/utils/xhprof_lib.php";//从源码包中拷贝xhprof_lib这个文件夹过来直接可以调用
    include_once "xhprof_lib/utils/xhprof_runs.php";  
    $objXhprofRun = new XHProfRuns_Default();//数据会保存在php.ini中xhprof.output_dir设置的目录去中 
    $run_id = $objXhprofRun->save_run($data, "test");
    //第二个参数是定义文件名称。名称如果为"xhprof",则在xhprof.output_dir设置的目录生成的文件:522ab85f40229.xhprof.xhprof。
    //格式为:"id标识.组名称.xhprof",id标识就是$run_id得到的结果。
    
    //id标识是每次运行的时候就生成一个新的标识,也就是生成一个新的文件,记录每次运行的数据
    var_dump($run_id);
    echo "http://www.xxxx.com/xhprof_html/index.php?run={$run_id}&source=test
    ";//source的值必须是save_run中指定的名称。这个其实就是根据编号和名称才能定位到对应的文件"522ab85f40229.xhprof.xhprof"
    //将这个地址输出来,是为了直接可以去查看分析结果。
    
    function save_stat($time)
    {
        static $call_count=1;
        $call_limit = 10;
        if(!$time) return ;
            $date = date("Y-m-d");//暂时按照天来生成文件。方便查阅
        $exec_stat_file = './exec_stat'.DIRECTORY_SEPARATOR."exec_stat_file-".$date.".txt";
        $fp = fopen($exec_stat_file,'ab');
        if(flock($fp,LOCK_EX))
        {
            $s = 'access:'.date("Y-m-d H:i:s").',execute time:'.$time.'s,request_url:http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']."||".PHP_EOL;
            fwrite($fp,$s);
            flock($fp,LOCK_UN);
        }else{
            usleep(1000);
            if($call_count<$call_limit)
            {
                $call_count++;
                save_stat($time);
            }
        }
    
        @fcolse($fp);
        //var_dump($fp);
    
    }
    function microtime_float()
    {
        list($usec, $sec) = explode(" ", microtime());
        return ((float)$usec + (float)$sec);
    }
    ?>

     如果是本地,就访问 localhost/xhprof_html  就会出现以下页面:

                           

    上图出现的链接,随便点一个,就会出现以下页面:

    点击红色方框这里就会出现作图工具graphviz绘制的分析图:

        

  • 相关阅读:
    C struct的内存对齐
    C++ 继承、函数重载
    C++ 操作符重载
    C中入栈顺序和运算顺序有关系吗?
    Java 关于finally、static
    C++ 类的复制控制
    Linux中vi的使用
    C++ 类的头文件、实现、使用
    (web)个人项目(挖宝网)
    MariaDB使用enum和set
  • 原文地址:https://www.cnblogs.com/wenhainan/p/6542655.html
Copyright © 2011-2022 走看看