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 autoconf3、配置php.ini在php的配置文件中添加两行配置,并重启php-fpm:extension=xhprof.so

xhprof.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脚本中使用的模式如下:

// 开始分析

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如下:

namespace App\Helpers;

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文件中加几行代码:

/*

|--------------------------------------------------------------------------

| Create The Application

|--------------------------------------------------------------------------

|

*/

$app = require __DIR__.'/../bootstrap/app.php';

/*

|--------------------------------------------------------------------------

| Run The Application

|--------------------------------------------------------------------------

|

*/

require_once './XhprofHelper.php';

\MyHelpers\XhprofHelper::beginXhprof();

$app->run();

\MyHelpers\XhprofHelper::endXhprof();

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

什么工具可以分析php源代码,[精选]PHP性能分析工具,你在用哪一个?相关推荐

  1. 性能工具之调试工具 GDB(你以为性能分析中用不到吗?)

    文章目录 一.前言 二.环境依赖 三.Helloword 示例 四.调试 Redis 示例 1.下载 Redis 源码并解压 2.确认编译选项 3.检查编译 4.GDB 调用 redis-server ...

  2. mysql 性能分析_十大MySQL性能分析工具汇总!专治MySQL性能瓶颈

    前言 MySQL 数据库最常见的两个瓶颈是CPU和I/O的瓶颈.CPU在饱和的时候一般发生在数据装入内存或从磁盘上读取数据时候,磁盘I/O瓶颈发生在装入数据远大于内存容量的时候. MySQL数据库性能 ...

  3. windows服务器性能分析方法小结,Windows服务器性能分析方法小结

    Windows服务器性能各种指标的分析 事情的起因是BOSS/CRM系统的扩容.我所要做得,仅仅是写一份CRM Windows服务器的性能分析,不过这足以让我一筹莫展了,毕竟当时对主机性能分析的认识, ...

  4. 功率谱估计性能分析及matlab仿真,功率谱估计性能分析及Matlab仿真.doc

    您所在位置:网站首页 > 海量文档 &nbsp>&nbsp计算机&nbsp>&nbspmatlab 功率谱估计性能分析及Matlab仿真.doc19页 ...

  5. linux ubuntu pkg-config工具的使用(源代码编译库接口查询工具)

    后更... 文章目录 1. pkg-config介绍 2. pkg-config的使用 1. pkg-config介绍 pkg-config是一个在源代码编译时查询已安装的库的使用接口的计算机工具软件 ...

  6. mysql explain 性能分析_Mysql explain用法和性能分析

    上次老大帮忙调整SQL的时候看到,经常用到explain,就自己学习下,数据库方面是弱项,急需有待加强啊.闲话不多说,步入正题: MySQL中EXPLAIN解释命令是显示mysql如何使用索引来处理s ...

  7. 怎么做应力应变曲线_做冲压材质分析很重要,材料性能分析汇总~

    1.关于拉伸力-伸长曲线和应力-应变曲线的问题 低碳钢的应力-应变曲线 a.拉伸过程的变形: 弹性变形,屈服变形,加工硬化(均匀塑性变形),不均匀集中塑性变形. b.相关公式: 工程应力 σ=F/A0 ...

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

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

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

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

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

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

最新文章

  1. 深入理解Java的接口和抽象类
  2. plsql导入到mysql数据库乱码问题_PLSQL打开sql文件中文乱码解决方案
  3. JavaFx实现-渐变效果之一
  4. log4j(六)——log4j.properties简单配置样例说明
  5. word中图片超出页边距_如何在Word中更改页边距
  6. 基于webpack搭建的vue element-ui框架
  7. 字母c语言定义为什么变量,C语言为什么要规定对所用到的变量要“先定义,后使用”...
  8. 对无线编码缓存的一些理解
  9. android插件化-apkplug中OSGI服务基本原理-08
  10. matlab ode45求解齿轮动力学,Matlab讨论区 - 声振论坛 - 振动,动力学,声学,信号处理,故障诊断 - Powered by Discuz!...
  11. 2022五一数学建模有何思路模型?
  12. Springboot整合kafka
  13. 分析 OVS 如何实现 vlan 隔离 - 每天5分钟玩转 OpenStack(140)
  14. kubelet源码分析(五)之 syncPod
  15. php公益培训第2部,PHP高手之路-传世经典第二部直播课表
  16. iOS开发者账号申请
  17. 小白calculator
  18. Stm32F4x采用外部触发法测矩形波频率和占空比
  19. 立足小餐饮,“新名酒”江小白能走多远?
  20. shell的logo含义_45个富有深意的巧妙logo设计

热门文章

  1. 李宏毅机器学习——循环神经网络(一)
  2. 编译libfetion时,提示 从 int 到 QString 的转换有歧义
  3. 用acdess制作html文件,使用ACDSee制作图片注释
  4. 甲方在IT信息化中的项目管理
  5. 【历史上的今天】7 月 22 日:Linux 开发的“二把手”出生;苹果发布 OS 8;MSN 发布
  6. 赛门铁克symantec 卸载需要密码解决方法
  7. 社会工程学利用的人性_社会工程学利用的人性弱点包括
  8. 如何计算信号的信噪比
  9. 屏幕大师4k屏幕测试软件,如何检测电视屏幕真伪4K、坏点漏光?两款工具一键辨别!...
  10. LinkLab 链接