zoukankan      html  css  js  c++  java
  • 性能分析

    简介

    XHProf是一个分层PHP性能分析工具。它报告函数级别的请求次数和各种指标,包括阻塞时间,CPU时间和内存使用情况。XHProf分析报告有助于理解被执行的代码的结构,它有一个简单的HTML的用户界面,基于浏览器的性能分析用户界面能更容易查看代码执行顺序,也更方便查看性能比较低的模块。是php的一个拓展。

    安装

    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
    make
    make install

    注:访问  http://pecl.php.net 搜索 xhprof 下载安装最新版本,留意版本对应的 php 版本。

    启用拓展

    vim /etc/php/php.in
    
    引入扩展,并自定义输出目录
    [xhprof]
    extension = xhprof.so
    xhprof.output_dir = /Users/xx/work/php/xhprof/outlog

    将 解压后 xhprof 文件夹中的这两个目录复制一份到  /Users/xx/work/php/xhprof 目录下

    cp -r xhprof_lib/ /Users/xx/work/php/xhprof/xhprof_lib/
    cp -r xhprof_html/ /Users/xx/work/php/xhprof/xhprof_html/

    并在/Users/xx/work/php/xhprof根目录下添加文件 inject.php

    <?php
    
    //开启xhprof
    xhprof_enable(XHPROF_FLAGS_MEMORY | XHPROF_FLAGS_CPU);
    
    //在程序结束后收集数据
    register_shutdown_function(function() {
        $xhprof_data   = xhprof_disable();
    
        //让数据收集程序在后台运行
        if (function_exists('fastcgi_finish_request')) {
            fastcgi_finish_request();
        }
    
        //保存xhprof数据
        $XHPROF_ROOT = '/Users/xx/work/php/xhprof';
        include_once $XHPROF_ROOT . "/xhprof_lib/utils/xhprof_lib.php";
        include_once $XHPROF_ROOT . "/xhprof_lib/utils/xhprof_runs.php";
        // save raw data for this profiler run using default
        // implementation of iXHProfRuns.
        $xhprof_runs = new XHProfRuns_Default();
        // save the run under a namespace "xhprof_foo"
        $run_id = $xhprof_runs->save_run($xhprof_data, "xhprof_foo");
        echo $run_id;
    });

    nginx配置,方便后期查看性能报告

    server {
           listen 80; 
           server_name xhprof-view.com;
    
           #root  /Users/xx/work/php/xhprof;
        
            location / { 
                root   /Users/xx/work/php/xhprof;
                #try_files $uri $uri/ /index.php?$query_string;
                index  index.php index.html index.htm;
            }   
    
            # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
            #   
            location ~ .php$ {
                root           /Users/xx/work/php/xhprof;
                fastcgi_pass   127.0.0.1:9000;
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
                fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                include        fastcgi_params;
            }   
    }

    被监控站点 nginx 配置。

    fastcgi_param PHP_VALUE "auto_prepend_file=/Users/liugx/work/php/xhprof/inject.php";

    注:日常开发过程中建议将此配置注释,否则会不断产生性能分析报告,需要时再打开。

    重启 nginx 和 php-fpm。访问被监控站点,然后 http://xhprof-view.com/xhprof_html/ 即可看到性能分析结果。

     点击 [View Full Callgraph] 可以查看详细调用过程,以及执行过程中需要优化的地方,重点留意粗箭头方向和红、黄颜色的模块。

     番外篇

    点击 [View Full Callgraph] 会出现 mac sh: dot: command not found 提示,别慌,这是没有安装 graphviz。直接 brew 安装还不太行,需要借助 port 来安装。

    安装 macPorts

    http://distfiles.macports.org/MacPorts/MacPorts-2.4.0-10.10-Yosemite.pkg

    安装完成后执行命令

    sudo port -v selfupdate
    sudo port install graphviz

    查看是否安装成功

    dot -V

    出现版本信息即安装成功,

    这时,如果点击[View Full Callgraph]如果还是出现,mac sh: dot: command not found 这样的信息,直接改/Users/xx/work/php/xhprof/xhprof_lib/utils/callgraph_utils.php

    中的 $cmd = " dot -T".$type; 改成 $cmd = " /opt/local/bin/dot -T".$type; 即可。

  • 相关阅读:
    换行符 CR
    c# 定义的属性名与保留关键字冲突
    Redis 以window 服务启动
    c# Guid.NewGuid().ToString(format
    select 下拉源动态赋值
    html 控制input标签只能输入数字
    HTTP 错误 500.19
    Android debugger 出现提示Connected to the target VM, address: 'localhost:xxxx', transport: 'socket'
    siege--Web性能压测工具
    python+selenium上传文件注意点
  • 原文地址:https://www.cnblogs.com/suojian/p/14899353.html
Copyright © 2011-2022 走看看