本篇博文所使用的环境如下:

PHP版本:php7.2

操作系统环境:CentOS Linux release 7.7.1908 (Core)

前言概述

你和别人同时写出了一个导出用户的功能,你的导出一次用了20分钟,而别人的导出用户功能只用了1分钟,那么这里就很明显的区分出来了你们代码的效率。代码的优劣是问题的根源。如果你想找出是什么原因导致代码执行这么慢,那么你就要学会怎么分析代码性能,找到代码瓶颈。

我们除了可以使用xdebug分析php的性能之外,还可以使用xhprof进行分析php的代码性能。

xhprof工具的简介

xhprof是由facebook开源出来的一个php轻量级的性能分析工具,跟xdebug类似,但性能开销更低,还可以用在生产环境中,也可以由程序开关来控制是否进行profile。但是官方因为长时间不更新,针对php7已无法正常安装使用。

对于还在使用php5的童鞋,可以到php官方进行下载安装:

php7系列的xhprof扩展可以在以下地址进行下载安装:

https://github.com/longxinH/xhprof  // xhprof的开源地址(这是第三方的一个库,并不是xhprof官方的。xhprof官方暂不支持php7系列)

xhprof安装wget https://github.com/longxinH/xhprof/archive/v2.1.0.tar.gz

tar -zxvf v2.1.0.tar.gz

cd xhprof-2.1.0/

cd extension/

phpize

./configure --with-php-config=/usr/bin/php-config #这里的php-config路径换成你自己的

make && make install

#ps:如果你wget不下来,文件末尾我会给出相关文件的,自行下载并上传到自己的服务器进行解压,然后进行一系列的安装即可。

以上步骤完成之后在php.ini中增加如下配置:[xhprof]

extension=/usr/lib64/php/modules/xhprof.so  #xhprof.so文件路径换成你自己的

xhprof.output_dir=/tmp/xhprof

接着在/tmp目录创建一个xhprof文件夹,并赋予777权限,用来保存xhprof分析所得出的日志文件mkdir /tmp/xhprof/

chmod -R 777 /tmp/xhprof/ #这里就直接省事给777了。。

注意:

①、./configure 不一定需要增加--with-php-config,只有当服务器有多个版本php的时候,或者php-config没有在/usr/bin的时候才需要指定php-config文件的路径位置

②、xhprof的output_dir配置项需要可读可写的权限,我们在上面已经配置过了。xhprof.output_dir是xhprof的输出目录,每次执行 xhprof的save_run方法时都会生成一个 run_id.project_name.xhprof 文件。这个目录在哪里并不重要(按照本文的配置,目前该目录的位置在/tmp/xhprof/)。注意此路径的权限要可读写!否则文件无法生成成功。

xhprof是否安装成功的验证

如果你的phpinfo中有显示xhprof扩展信息,则说明安装成功。

安装成功示例截图如下:

简单使用

xhprof工具需要引入2个类库:

还记得之前下载的源码吧?把里面的xhprof_lib目录复制一份儿,复制到你的项目目录中,并且在你需要分析的php代码中进行引入(你需要在哪里进行分析php代码性能,就在哪里的php代码中引入下面这2个文件):include_once '/home/wwwroot/default/xhprof/xhprof_lib/utils/xhprof_lib.php';

include_once '/home/wwwroot/default/xhprof/xhprof_lib/utils/xhprof_runs.php';

开启性能分析:使用 xhprof_enable() 函数xhprof_enable(XHPROF_FLAGS_CPU|XHPROF_FLAGS_MEMORY|XHPROF_FLAGS_NO_BUILTINS);

//XHPROF_FLAGS_NO_BUILTINS (integer)

//使得跳过所有内置(内部)函数

//XHPROF_FLAGS_CPU (integer)

//使输出的性能数据中添加 CPU 数据

//XHPROF_FLAGS_MEMORY (integer)

//使输出的性能数据中添加内存数据

//当然了,这些预定义常量是可选的,不写也可以,直接在相关php代码块中调用 xhprof_enable(); 即可

关闭性能分析:使用 xhprof_disable() 函数,并将分析的结果保存起来$data = xhprof_disable(); //关闭性能分析

$obj_xhprof_run = new XHProfRuns_Default();

$run_id         = $obj_xhprof_run->save_run($data, "test"); //把性能分析的报告保存到output_dir目录

var_dump($run_id); //$run_id是本次报告的一个报告id,用来标识本次报告的唯一性,相当于数据表中的主键id,下面查看性能的时候会用到这个$run_id

xhprof工具的完整使用示例代码如下:<?php

include_once '/home/wwwroot/default/xhprof/xhprof_lib/utils/xhprof_lib.php';

include_once '/home/wwwroot/default/xhprof/xhprof_lib/utils/xhprof_runs.php';

xhprof_enable();  //开启性能分析检测

include_once './mysql.php';

$sql     = "SELECT * FROM employee";

$sql_one = "SELECT * FROM employee WHERE id = 3";

$result = Mysql::getAll($sql);

$row    = Mysql::getRow($sql_one);

//echo "

";

//print_r($result);

//echo "


";

//print_r($row);

$data = xhprof_disable(); //关闭性能分析

$obj_xhprof_run = new XHProfRuns_Default();

$run_id         = $obj_xhprof_run->save_run($data, "test"); //保存性能分析报告

var_dump($run_id); //输出本次性能分析的报告id

然后访问一下该文件,就会记录该文件的php代码的性能分析报告。

查看性能分析:

还记得之前下载的源码吧?把里面的 xhprof_html 目录复制出来,单独做成一个目录,并通过nginx或apache配置成一个可访问的站点目录:

示例截图如下:

并且把之前的 xhprof_lib 复制一份到同级目录(也就是说 xhprof_lib 和 xhprof_html 这两个文件夹是在同一个目录下,也就是同级的关系),目录示例截图如下:

接下来,我们访问这个站点:

上图中可以看到,会显示出所有的你已经分析完毕,并保存的分析报告文件,其中xxxxxxx.test.xhprof就是我们上面所说的$run_id(也就是 报告id)。

点击其中一个进行查看:

如上图所示,这样就可以查看到所有代码执行的cpu消耗,执行时间,占用情况了,根据这份数据,去优化最耗时间的代码就可以了。其中Calls、Incl. Wall Time(microsec)、Excl. Wall Time(microsec)这三个单词,点击 可以将下面显示的结果进行降序排序。

根据上图显示的结果,这里列举一些常用的名词的解释:

Function Name:调用的方法名称

Calls:方法被调用的次数

Calls%:方法调用次数在同级方法总数调用次数中所占的百分比

Incl.Wall Time(microsec):方法执行花费的时间,包括子方法的执行时间(单位:微秒)

IWall%:方法执行花费的时间百分比

Excl. Wall Time(microsec):方法本身执行花费的时间,不包括子方法的执行时间(单位:微秒)

EWall%:方法本身执行花费的时间百分比

Incl. CPU(microsecs):方法执行花费的CPU时间,包括子方法的执行时间(单位:微秒)

ICpu%:方法执行花费的CPU时间百分比

也可以查看请求执行的流程图:

上面那个图中,有一个 [View Full Callgraph] 点击这里,可以查看该分析报告的请求执行流程图,如果点击之后报如下错误:failed to execute cmd: " dot -Tpng". stderr: `sh: dot: command not found '

说明服务器没有安装画图软件 graphviz,centos系统直接使用:yum -y install graphviz  一键安装即可。

点击 [View Full Callgraph] 之后的示例截图如下:

如上图所示,xhprof会通过 黄色,红色,以及一根比较粗的灰色的线,为我们标识出主要的耗时路线。调用红色是耗时最大的函数调用,通过分析这个图片我们可以看出哪里耗时长,从而有针对性的去做优化。

本文所使用的相关文件:

相关文件.zip

如果你要使用本文的相关文件,请下载解压之后,自行调整适合你自己的对应的文件路径。

本文介绍的只是xhprof工具在linux上如何使用,xhprof在windows上如何使用可参考以下链接:

今天进步一点点,明天梦想近点点!

声明:禁止任何非法用途使用,凡因违规使用而引起的任何法律纠纷,本站概不负责。

php 程序性能分析工具,php的性能分析工具:xhprof相关推荐

  1. C++ 性能分析工具调研

    文章目录 0. 前言 1. gprof 3. valgrind 4. gperftools 5. perf 0. 前言 目标:性能分析(profile)包含的内容特别多,但目前我只关注运行时间. 详细 ...

  2. Java 性能分析工具 , 第 3 部分: Java Mission Control

    引言 本文为 Java 性能分析工具系列文章第三篇,这里将介绍如何使用 Java 任务控制器 Java Mission Control 深入分析 Java 应用程序的性能,为程序开发人员在使用 Jav ...

  3. Java Mission Control-Java 性能分析工具

    引言 本文为 Java 性能分析工具系列文章第三篇,这里将介绍如何使用 Java 任务控制器 Java Mission Control 深入分析 Java 应用程序的性能,为程序开发人员在使用 Jav ...

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

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

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

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

  6. Linux系统下常见性能分析工具的使用

    在前面的文章中,我简单介绍了影响linux性能的几个方面以及如何解决这些方面的问题,但是如何才能从系统上发现是某个方面或某几个方面出现问题了呢,这就需要使用linux系统提供的几个常用性能分析工具,下 ...

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

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

  8. php性能分析工具XHProf安装配置使用教程(linux精华版)

    XHProf是一个分层PHP性能分析工具.它报告函数级别的请求次数和各种指标,包括阻塞时间,CPU时间和内存使用情况.一个函数的开销,可细分成调用者和被调用者的开销,XHProf数据收集阶段,它记录调 ...

  9. 前端性能分析工具利器

    作者:basinwang,腾讯 PCG 前端开发工程师 大型项目容易遇到性能问题,一般来说,当我们遇到性能瓶颈的时候,才会开始去进行相应的分析.分析的方向除了业务本身的特点相关之外,常见的还可以借助一 ...

  10. linux 性能教程,Linux系统下常见性能分析工具的使用

    在前面的文章中,我简单介绍了影响linux性能的几个方面以及如何解决这些方面的问题,但是如何才能从系统上发现是某个方面或某几个方面出现问题了呢,这就需要使用linux系统提供的几个常用性能分析工具,下 ...

最新文章

  1. zatree插件优化:优化左侧边栏
  2. selectpselect/pollppoll/epoll
  3. 一次竞赛案例的分享——基于正则表达式的深度学习应用
  4. 2014\Province_C_C++_B\6 奇怪的分式
  5. hdoj - 1258 Sum It Up hdoj - 1016 Prime Ring Problem (简单dfs)
  6. [家里蹲大学数学杂志]第387期一套实变函数期末试题参考解答
  7. iphone退款申请教程_【揭秘】朋友圈卖的iOS退款、王者荣耀0元撸点券教程
  8. 微服务升级_SpringCloud Alibaba工作笔记0001---新一代网关spring gateway和zuul的关系说明
  9. HDU 1730 Northcott Game
  10. flash实验中需添加的flash.c文件
  11. Python3网络爬虫(三):漫画下载,动态加载、反爬虫这都不叫事!
  12. 计算机画图橡皮擦怎么扩大,大师为你演示win7系统画图工具中改变橡皮擦大小的图文教程...
  13. 运维python要掌握到什么程度_运是什么意思 运字五行属什么
  14. SCRDet:Towards More Robust Detection for Small, Cluttered and Rotated Objects(摇杆旋转目标检测方法)
  15. Html5调用手机摄像头并实现人脸识别
  16. HTML基础知识点总结
  17. linux安装git环境
  18. 唯样商城:从黑暗到光明,LED照明演变史知多少?内有彩蛋
  19. TypeScript类的使用
  20. Vue报错: Error compiling template:

热门文章

  1. 如何测量三角形的斜边长度?
  2. 计算机能不装显卡么,电脑不装显卡能玩CF吗
  3. 安装dbVisualizer报错:the java_home environment viariable does not point to a working 32-bit JDK OR JRE
  4. TcaplusDB X 光与夜之恋|来谈一场甜甜的恋爱
  5. Linux Oracle卸载步骤
  6. Fiddler https最新抓包方法(Android 9.0)
  7. Echarts实战案例代码(6):不设区的地级市行政区划3D工作进度五色图
  8. html修改鼠标手势,css要怎么设置鼠标手势?
  9. (十一)【数电】(组合逻辑电路)数据分配器和数据选择器
  10. 阿里矢量图库 iconfont 引入项目使用方法