使用 xhprof 进行 php 的性能分析
基于本机环境(php7,macos)
1、xhprof 扩展
php7 下安装 xhprof 扩展:
git clone https://github.com/longxinH/xhprof
cd xhprof/extension/
phpize
./configure
make
make install
安装完之后,需要修改 php.ini 配置,找不到 php.ini 可以 php -i | grep php.ini,添加以下配置:
extension=/usr/local/Cellar/php@7.1/7.1.18/pecl/20160303/xhprof.so
xhprof.output_dir=/Users/ruby/project/xhprof-test/output
以上路径需要根据本机安装路径进行修改,需要说一下的是,output_dir 项,我们在开启 xhprof 性能分析的时候,最后分析结果会保存到一个文件,而这些输出的文件就保存到这个 output_dir 指定的目录,下面会用到。
2、进入 xhprof/xhprof_html 目录,使用内置的 php 服务器开启 php 服务
xhprof/xhprof_html
php -S 0.0.0.0:9500
然后使用浏览器访问:http://127.0.0.1:9500,可以看到以下界面:
其中的几个超链接就是我们使用 xhprof 的时候产生的性能分析结果文件。我们可以点击进去查看具体的性能分析:
我们可以看到各个函数的调用次数、时间。
3、我们可以点击上图的 "View Full Callgraph",查看性能瓶颈。(需要 graphviz, mac 下安装:brew install graphviz)
其中红色的部分是耗时最长的,这样我们就可以针对具体的代码进行优化。
附:
1、测试代码:
<?php $XHPROF_ROOT = realpath(dirname(__FILE__) .'/xhprof');
include_once $XHPROF_ROOT . "/xhprof_lib/utils/xhprof_lib.php";
include_once $XHPROF_ROOT . "/xhprof_lib/utils/xhprof_runs.php"; //开启xhprof
xhprof_enable(0, []); $range = range(1, 10000);
foreach ($range as $_) {
$_ ++;
} $array = [];
for ($i = 0; $i < 1000; $i ++) {
$array[] = mt_rand($i, $i + 1000);
} $array1 = [];
for ($i = 0; $i < 1000; $i ++) {
$array1[] = mt_rand($i, $i + 1000);
} $new_array = array_merge($array, $array1); //你也可以手动结束执行,保存分析结果
$xhprof_data = xhprof_disable();
$xhprof_runs = new XHProfRuns_Default();
$run_id = $xhprof_runs->save_run($xhprof_data, "xhprof_foo");
2、更现代化的依赖使用方式
composer require lox/xhprof
3、laravel 集成
public/index.php
<?php /*
|--------------------------------------------------------------------------
| Create The Application
|--------------------------------------------------------------------------
|
| First we need to get an application instance. This creates an instance
| of the application / container and bootstraps the application so it
| is ready to receive HTTP / Console requests from the environment.
|
*/ xhprof_enable(0, []); $app = require __DIR__.'/../bootstrap/app.php'; /*
|--------------------------------------------------------------------------
| Run The Application
|--------------------------------------------------------------------------
|
| Once we have the application, we can handle the incoming request
| through the kernel, and send the associated response back to
| the client's browser allowing them to enjoy the creative
| and wonderful application we have prepared for them.
|
*/ $app->run(); $xhprof_data = xhprof_disable();
$xhprof_runs = new XHProfRuns_Default();
$run_id = $xhprof_runs->save_run($xhprof_data, "xhprof_foo");
上面的第一行和最后三行是 xhprof 相关代码
概要报告字段含义
Function Name:方法名称。
Calls:方法被调用的次数。
Calls%:方法调用次数在同级方法总数调用次数中所占的百分比。
Incl.Wall Time(microsec):方法执行花费的时间,包括子方法的执行时间。(单位:微秒)
IWall%:方法执行花费的时间百分比。
Excl. Wall Time(microsec):方法本身执行花费的时间,不包括子方法的执行时间。(单位:微秒)
EWall%:方法本身执行花费的时间百分比。
Incl. CPU(microsecs):方法执行花费的CPU时间,包括子方法的执行时间。(单位:微秒)
ICpu%:方法执行花费的CPU时间百分比。
Excl. CPU(microsec):方法本身执行花费的CPU时间,不包括子方法的执行时间。(单位:微秒)
ECPU%:方法本身执行花费的CPU时间百分比。
Incl.MemUse(bytes):方法执行占用的内存,包括子方法执行占用的内存。(单位:字节)
IMemUse%:方法执行占用的内存百分比。
Excl.MemUse(bytes):方法本身执行占用的内存,不包括子方法执行占用的内存。(单位:字节)
EMemUse%:方法本身执行占用的内存百分比。
Incl.PeakMemUse(bytes):Incl.MemUse峰值。(单位:字节)
IPeakMemUse%:Incl.MemUse峰值百分比。
Excl.PeakMemUse(bytes):Excl.MemUse峰值。单位:(字节)
EPeakMemUse%:Excl.MemUse峰值百分比。
使用 xhprof 进行 php 的性能分析的更多相关文章
- php性能分析工具 - xhprof的安装使用
一.前言 有用的东西还是记录下来吧,也方便以后的查询:这次记录一下xhprof的安装使用: xhprof是facebook开源出来的一个php轻量级的性能分析工具,跟Xdebug类似,但性能开销更低, ...
- PHP 性能分析第一篇: Xhprof & Xhgui 介绍
[前言]这是国外知名博主 Davey Shafik所撰写的 PHP 应用性能分析系列的第一篇,阅读第二篇可深入了解 xhgui,第三篇则关注于性能调优实践. 什么是性能分析? 性能分析是衡量应用程序在 ...
- PHP性能分析——xhprof(window 安装xhporf)
1 下载xhprof的php扩展 因为官方的xhprof不支持php7,所以采用tideways版本的xhprof 下载地址:windows版tideways_xhprof 将windows版的dll ...
- PHP 性能分析第一篇: Intro to Xhprof & Xhgui
[前言]这是国外知名博主 Davey Shafik所撰写的 PHP 应用性能分析系列的第一篇,阅读第二篇可深入了解 xhgui,第三篇则关注于性能调优实践. 原文链接如下: https://blog. ...
- PHP性能分析工具:xhprof
phpize的安装 一直想装VLD却一直没装上,因为需要用到phpize,但这个工具大部分机子都没有装,上网搜了一下大部分都是讲phpize的应用没有讲怎么安装. 今天终于搜到了,不过是要在li ...
- Centos下给PHP7添加Xhprof性能分析
什么是 Xhprof?XHProf是facebook 开发的一个测试php性能的扩展,本文记录了在PHP应用中使用XHProf对PHP进行性能优化,查找性能瓶颈的方法. 它报告函数级别的请求次数和各种 ...
- php性能分析利器:xhprof
xhprof是facebook团队开发的用于研究php性能的扩展,并且提供了图形化的界面展示性能参数和过程.对于各种php的项目的性能瓶颈研究有一定帮助,值得一用. 我在上一篇<Dockerfi ...
- PHP 性能分析第三篇: 性能调优实战
注意:本文是我们的 PHP 性能分析系列的第三篇,点此阅读 PHP 性能分析第一篇: XHProf & XHGui 介绍 ,或 PHP 性能分析第二篇: 深入研究 XHGui. 在本系列的 ...
- 如何进行python性能分析?
在分析python代码性能瓶颈,但又不想修改源代码的时候,ipython shell以及第三方库提供了很多扩展工具,可以不用在代码里面加上统计性能的装饰器,也能很方便直观的分析代码性能.下面以我自己实 ...
随机推荐
- python之爬虫_并发(串行、多线程、多进程、异步IO)
并发 在编写爬虫时,性能的消耗主要在IO请求中,当单进程单线程模式下请求URL时必然会引起等待,从而使得请求整体变慢 import requests def fetch_async(url): res ...
- 利用Cocoapods创建基于SVN的私有库podspec
由于项目年后要进行组件化,考虑到公司内部实现的一些私有组件,不对外公开,而又想在不同项目中使用,该怎么办呢?由于cocoapods有了强大的功能,可以自己创建podspec,更可以设置私有的库.那么利 ...
- “Hello World!”团队第七周召开的第五次会议
今天是我们团队“Hello World!”团队第七周召开的第五次会议.博客内容: 一.会议时间 二.会议地点 三.会议成员 四.会议内容 五.todo list 六.会议照片 七.燃尽图 八.代码 一 ...
- final发布视频展示博客
Part One [探路者]选题展示视频链接: http://v.youku.com/v_show/id_XMzIxMDM2MTQ1Ng==.html?spm=a2h3j.8428770.341605 ...
- BugPhobia回顾篇章:团队Alpha阶段工作分析
0x00:序言 1 universe, 9 planets, 204 countries,809 islands, 7 seas, and i had the privilege to meet yo ...
- 冲刺One之站立会议2
在确定了总体目标之后,我们先决定了实现的具体功能,包括一个登陆界面,一个聊天室的主界面和服务器端的内容.我们今天完成了一小部分内容,把每个内容的主体框架搭建了起来. 效果如下图所示: 燃尽图2
- 《Spring1之第八次站立会议》
<第八次站立会议> 昨天:我查找了关于实现视频功能的相关代码. 今天:对用C#写的视频功能进行了相关的了解. 遇到的问题:由于对C#不是很了解,所以其中的有些代码还是看不懂.
- Struts2 核心流程
1.Struts2架构图 这是Struts2官方站点提供的Struts 2 的整体结构. 执行流程图 2.Struts2部分类介绍 这部分从Struts2参考文档中翻译就可以了. ActionM ...
- 补发9.27“天天向上”团队Scrum站立会议
组长:王森 组员:张金生 张政 栾骄阳 时间:2016.09.27 地点:612寝 组员 已完成 未完成 王森 分析设计亮点 原型搭建 张金生 设计UI框架 美化完善 张政 学习C#语言初步应用 熟练 ...
- CASE (Transact-SQL)
A. 使用带有 CASE 简单表达式的 SELECT 语句Using a SELECT statement with a simple CASE expression在 SELECT 语句中,CASE ...