PHP性能分析工具,小编一直都在用这个:Xhprof , 今天给大家介绍一下如何安装与如何使用,注意事项等!也许你会用得着的。

什么是Xhprof

Xhprof是一个轻量级的分层性能测量分析器。在数据收集阶段,它跟踪调用次数与测量数据,展示程序动态调用的弧线图。它在报告、后期处理阶段计算了独占的性能度量,例如运行经过的时间、CPU 计算时间和内存开销。

Xhprof包含了一个基于 HTML 的简单用户界面(由 PHP 写成),可以方便地浏览性能分析报告,这对理解代码执行结构常常很有帮助。

安装

Xhprof是PHP的一个扩展,所以只需要按照PHP扩展的编译安装方法来安装即可。

1、下载扩展包

支持PHP 7+的Xhprof扩展包:https://github.com/longxinH/xhprof

wget https://github.com/longxinH/xhprof/archive/v2.2.0.tar.gz

2、解压编译

PHP扩展编译三部曲:phpize、configure、make。

$ tar xzf xhprof-2.2.0.tar.gz$ cd xhprof-2.2.0/extension$ /usr/local/services/php7/bin/phpize$ ./configure --prefix=/usr/local/services/php7/lib/php/extensions/no-debug-zts-20160303 --with-php-config=/usr/local/services/php7/bin/php-config$ make

然后就可以在当前的modules目录下看到编译生成的so文件,将它拷贝到扩展目录。

注:安装autoconf库:yum -y install autoconf

3、配置php.ini

在php的配置文件中添加两行配置,并重启php-fpm:

extension=xhprof.soxhprof.output_dir=/data/release/xhprof_project/output

其中xhprof.output_dir用于指定存储xhprof分析数据的目录。

二、创建Xhprof项目

1、创建目录

mkdir /data/release/xhprof_project

2、将相关文件拷贝到目录下

cp -r /data/software/xhprof-2.2.0/xhprof_html /data/release/xhprof_project/cp -r /data/software/xhprof-2.2.0/xhprof_lib /data/release/xhprof_project/

3、添加nginx访问配置

server {        listen  80;        server_name xhprof.report.com;        root /data/release/xhprof_project/xhprof_html;        index index.php index.html;        location ~* .php$ {                include fastcgi_params;                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;                fastcgi_pass  127.0.0.1:9000;                fastcgi_index index.php;        }}

三、如何使用

在PHP脚本中使用的模式如下:

<?php // 开始分析xhprof_enable();// 你的代码// 停止分析$xhprof_data = xhprof_disable();// 导入两个库文件$XHPROF_ROOT = "/data/release/xhprof_project";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_foo");// 查看地址echo "http://xhprof.report.com/index.php?run=$run_id&source=xhprof_foo"

默认只会分析代码的耗时,可以通过传参控制是否分析代码的memory和CPU性能数据:

xhprof_enable(XHPROF_FLAGS_CPU | XHPROF_FLAGS_MEMORY);

在浏览器打开输出的地址,可以看到如下结果分析页:

图中的表格给出了代码的性能分析数据,分别表示:

  • Funciton Name:函数名
  • Calls:调用次数
  • Calls%:调用占比
  • Incl. Wall Time (microsec):函数运行时间(包括子函数)
  • IWall%:函数运行时间(包括子函数)占比
  • Excl. Wall Time(microsec):函数运行时间(不包括子函数)
  • EWall%:函数运行时间(不包括子函数)占比

点击页面中[View Full Callgraph]链接,可以绘制出一张可视化的性能分析图。如果点击后报错failed to execute cmd:" dot -Tpng". stderr:sh:dot:command not found,可能是缺少依赖库graphviz,安装即可。

四、在Laravel项目中使用

方法一:直接使用

直接嵌在接口函数的开始和结束处:

// API接口public function testApi(Request $request) {    // =============API开始处================    xhprof_enable();    // =====================================    for ($i=0; $i<5; $i++) {        $this->bar($i);        $len = strlen("songlee");    }    // =============API结束处================    $xhprof_data = xhprof_disable();    $XHPROF_ROOT = "/data/release/xhprof_project";    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_foo");    // =====================================    return json_encode(true);}// 私有方法private function bar($num) {    if ($num > 0) {       $this->bar($num - 1);    }}

这种方法显然是最麻烦的。

方法二:封装Helper

封装成Helper放在app/Helpers目录下,使用XhprofHelper::beginXhprof()、XhprofHelper::endXhprof()方法嵌入接口。

XhprofHelper如下:

<?phpnamespace  AppHelpers;class XhprofHelper{    const XHPROF_ROOT = '/data/release/xhprof_project';    /**     * 开始分析     * @return mixed     */    static public function beginXhprof()    {        xhprof_enable(XHPROF_FLAGS_CPU | XHPROF_FLAGS_MEMORY);        return ;    }    /**     * 停止分析     * @return mixed     */    static public function endXhprof()    {        $xhprof_data = xhprof_disable();        // 导入两个库文件        include_once self::XHPROF_ROOT . "/xhprof_lib/utils/xhprof_lib.php";        include_once self::XHPROF_ROOT . "/xhprof_lib/utils/xhprof_runs.php";        // 保存这次分析的结果数据        $xhprof_runs = new XHProfRuns_Default();        $run_id = $xhprof_runs->save_run($xhprof_data, "api_demo");        return $run_id;    }}

然后可以在代码中使用:

// API接口public function testApi(Request $request) {    XhprofHelper::beginXhprof();    for ($i=0; $i<5; $i++) {       $this->bar($i);       $len = strlen("songlee");    }    XhprofHelper::endXhprof();    return json_encode(true);}

方法三:在入口文件index.php中注入

将方法二中封装的 XhprofHelper 文件放到入口文件所在的public目录下,然后在index.php文件中加几行代码:

<?php /*|--------------------------------------------------------------------------| Create The Application|--------------------------------------------------------------------------|*/$app = require __DIR__.'/../bootstrap/app.php';/*|--------------------------------------------------------------------------| Run The Application|--------------------------------------------------------------------------|*/require_once './XhprofHelper.php'; MyHelpersXhprofHelper::beginXhprof();$app->run();MyHelpersXhprofHelper::endXhprof();

但是这种方式分析的不仅仅只是业务代码,而是从Laravel项目启动到调用结束为止,整个调用链很长。

jq 直接调用php文件_PHP性能分析工具,你在用哪一个?相关推荐

  1. gbd 分析core文件_Go 性能分析工具 pprof 入门

    (给Go开发大全加星标) 来源:wudaijun https://wudaijun.com/2018/04/go-pprof/ [导读]pprof是golang用于性能分析的工具.可以生成图形和文本报 ...

  2. jq 直接调用php文件_PHP的函数类别和变量命名

    内部函数: PHP可以在函数内部再声明函数 * 目的就是在函数的内部调用 * 就是用来帮助外部函数完成一些子功能的. * 递归函数: 就是在自己内部调用自己的函数名 * 重用函数(使用自己定义的函数库 ...

  3. go build 无文件_Go学习_30_Golang代码性能分析工具

    Golang内置了一些性能分析工具,可以将性能分析的结果文件输出,我们可以使用图形化的工具查看分析结果,在使用这些工具之前,我们需要安装一些工具,以便于查看分析文件. 为了支持查看图形化分析结果,首先 ...

  4. 正确使用 Android 性能分析工具——TraceView

    前面唠叨 最近公司app中有些列表在滑动的时候会有卡顿现象,我就开始着手解决这些问题,解决问题之前首先要分析列表滑动的性能瓶颈在什么地方.因为之前不会正确使用TraceView这个工具,主要是看不懂T ...

  5. php性能分析工具 - xhprof的安装使用

    一.前言 有用的东西还是记录下来吧,也方便以后的查询:这次记录一下xhprof的安装使用: xhprof是facebook开源出来的一个php轻量级的性能分析工具,跟Xdebug类似,但性能开销更低, ...

  6. .NET 11 个 Visual Studio 代码性能分析工具

    原文地址 软件开发中的性能优化对程序员来说是一个非常重要的问题.一个小问题可能成为一个大的系统的瓶颈.但是对于程序员来说,通过自身去优化代码是十分困难的.幸运的是,有一些非常棒的工具可以帮助程序员进行 ...

  7. 11个Visual Studio代码性能分析工具

    软件开发中的性能优化对程序员来说是一个非常重要的问题.一个小问题可能成为一个大的系统的瓶颈.但是对于程序员来说,通过自身去优化代码是十分困难的.幸运的是,有一些非常棒的工具可以帮助程序员进行代码分析和 ...

  8. 系统级性能分析工具perf的介绍与使用

    测试环境:Ubuntu16.04 + Kernel:4.4.0-31 apt-get install linux-source cd /usr/src/tools/perf make &&am ...

  9. Linux常用性能分析工具汇总

    文章目录 性能分析工具 top pstree mpstat vmstat pidstat perf proc tcpdump bcc工具箱 cachestat cachetop memleak fil ...

最新文章

  1. 微软研究院开源DialoGPT:你有什么梦想?「让世界充满机器人」
  2. 如果用户访问一个不存在的地址呢?
  3. 过 DNF TP 驱动保护(一)
  4. Hadoop 04_Hadoop2.0
  5. [流体力学] 推导柱坐标系下的连续性方程
  6. Java案例:Swing摇奖器
  7. 网易云音乐被纳入港股通 3月7日起生效
  8. VSphere虚拟化部署(五)
  9. pytorch的dataset用法详解
  10. cad.net 筛选、选择集
  11. win11家庭中文版 安装docker 步骤
  12. java isnull方法_isnull函数详解
  13. SCC算法求强连通分量简单讲解证明及实现
  14. 财报前被香港证监会点名,富途内控再受拷问
  15. Hexo博客(Snail主题)搭建回顾概览
  16. 微信小程序:WeUI一个专为微信小程序设计的UI框架
  17. 农业遥感技术科研成果汇总
  18. 一次面试苏宁java开发的经历
  19. 双十二投影仪推荐 三分钟告诉你怎么挑选到称心如意的投影仪
  20. Unity游戏开发客户端面经——热更新(初级)

热门文章

  1. 自制 Word、Excel 批转 PDF 工具
  2. web.py+xheditor+ ajaxfileupload+新浪sae图片上传
  3. vue 项目中遇到的问题及解决方案
  4. Active MQ 传输 ObjectMessage 异常
  5. mysql主从复制及问题解决
  6. 【算法实践】搜狗信息流推荐算法交流.pdf(附下载链接)
  7. 关于智能推荐的几点思考
  8. 【广告技术】下个月会有多少用户看到洗发水广告?最先进的张量分解模型给你最好的答案
  9. 更小的模型,迈向更快更环保的NLP
  10. 用matlab画玫瑰代码,网上收到的用matlab画玫瑰花的代码怎么不行啊,报告错误,求大神...