xhprof是facebook团队开发的用于研究php性能的扩展,并且提供了图形化的界面展示性能参数和过程。对于各种php的项目的性能瓶颈研究有一定帮助,值得一用。

我在上一篇《Dockerfile搭建极简LNMP环境》一文中已经创建好了LNMP环境,下面是基于这个容器进行xhprof的安装和使用。

  1. 安装xhprof

编写如下install_xhprof.sh脚本,分为编译安装、设置扩展、部署前端模块文件三大步骤。

# get the source codes

wget https://pecl.php.net/get/xhprof-2.2.3.tgz
tar xvf xhprof-2.2.3.tgz
#mv xhprof-2.2.3 xhprof
cd xhprof/extension
phpize
./configure --enable-xhprof
make && make install # enable xhprof in php modules
echo "extension=xhprof.so" > /etc/php/7.4/cli/conf.d/20-xhprof.ini echo "xhprof.output_dir=/tmp" >> /etc/php/7.4/cli/conf.d/20-xhprof.ini
# enable xhprof in php-fpm modules
cp /etc/php/7.4/cli/conf.d/20-xhprof.ini /etc/php/7.4/fpm/conf.d/xhprof.ini # restart php-fpm service
service php7.4-fpm restart
# move fronted-codes to nginx's path
mkdir -p /var/www/xhprof
cp -r /installsofts/xhprof/xhprof_html /var/www/xhprof/
cp -r /installsofts/xhprof/xhprof_lib /var/www/xhprof/
  1. 添加虚拟主机到Nginx配置

    然后在/etc/nginx/site-enabled目录下创建一个名为xhprof.conf的配置文件,其内容如下:
server{
listen 80;
server_name xhprof.alice.show;
location / {
root /var/www/xhprof;
index index.html index.php;
}
location ~ \.php$ {
root /var/www/xhprof;
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
}
}
  1. 编写测试代码

    万事俱备只欠东风,下面编写一个测试代码来调用到xhprof:
<?php

include_once "./xhprof_lib/utils/xhprof_lib.php";
include_once "./xhprof_lib/utils/xhprof_runs.php"; function test($max)
{
for ($idx = 0; $idx < $max; $idx++) {
echo '2333' . "\r\n";
}
} function a()
{
test(rand(1000,2000));
} // 开启xhprof
xhprof_enable(); a(); // 收集profilling数据
$xhprof_data = xhprof_disable();
$xhprof_runs = new XHProfRuns_Default();
$run_id = $xhprof_runs->save_run($xhprof_data, "xhprof_foo");
# 打印出结果报告的URL
echo "\nhttp://xhprof.alice.show/xhprof_html/index.php?run=$run_id&source=xhprof_foo\n";

在浏览器中访问http://xhprof.alice.show/test2.php,就可以看到页面最后打印出了类似输出:

http://xhprof.alice.show/xhprof_html/index.php?run=602c9cfb679ee&source=xhprof_foo

然后访问这个链接就可以看到性能报告列表了,其中重点关注Calls(调用次数)以及Excl.Wall Time(执行时间)两列。如下图图1所示,可以看到每个方法被调用的情况。



此外还提供了调用图,更加直观,如图2所示,红色部分表示耗时很大的环节,也是性能优化需要重点关注的地方。

感谢Facebook团队开源出这么好用的性能分析工具,php性能之路还将继续!

php性能分析利器:xhprof的更多相关文章

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

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

  2. Linux性能分析利器——火焰图的安装使用

    火焰图(flame graph)是性能分析的利器,通过它可以快速定位性能瓶颈点. perf 命令(performance 的缩写)是 Linux 系统原生提供的性能分析工具,会返回 CPU 正在执行的 ...

  3. 一些JDK自带的性能分析利器

    有时候碰到服务器CPU飙升或者程序卡死之类的问题,一般都不太好定位.这类bug一般都隐藏的比较深并且还可能是偶发性的,比较棘手. 对于此类问题,一般我们都有固定的分析流程.借助于JDK自带的一些分析工 ...

  4. PHP性能分析工具xhprof的安装使用与注意事项

    前言 xhprof由facebook开源出来的一个PHP性能监控工具,占用资源很少,甚至能够在生产环境中进行部署. 它可以结合graphviz使用,能够以图片的形式很直观的展示代码执行耗时. 下面主要 ...

  5. windows下安装php性能分析工具XHProf

    一.安装扩展 下载XHProf扩展:http://dev.freshsite.pl/php-extensions/xhprof.html 放入扩展文件:下载后解压出.dll文件,拷贝它到php的ext ...

  6. React性能分析利器来了,妈妈再也不用担心我的React应用慢了(转)

    Profiler React16.5正式在devtool中加入了Profiler功能,用于收集每次变更导致的渲染时间,帮助开发者发现潜在的性能问题,有助于开发更高性能的React应用 官方博客 如何使 ...

  7. php性能分析工具xhprof

    安装方法: wget http://pecl.php.net/get/xhprof-0.9.x.tgz cp xhprof-0.9.x.tgz /home/www/xhprof.tgz tar zxv ...

  8. mysq 性能分析利器

    poor man’sprofiler 在Percona Toolkit 中我们也开发了一个类似的穷人剖析器,叫做pt-pmp

  9. valgrind 打印程序调用树+进行多线程性能分析

    使用valgrind的callgrind工具进行多线程性能分析 yum install valgrind / wget http://valgrind.org/downloads/valgrind-3 ...

随机推荐

  1. Fixing SQL Injection: ORM is not enough

    Fixing SQL Injection: ORM is not enough | Snyk https://snyk.io/blog/sql-injection-orm-vulnerabilitie ...

  2. How to kill go routine?

    How to kill go routine? https://stackoverflow.com/questions/37997608/kill-a-method-in-an-infinite-lo ...

  3. layui的tabletree扩展组件

    需求:点击父级菜单展示子级菜单 难点:某个父级菜单下面有5000条子级菜单(有点坑),当我想把这5000条子级菜单塞到父级菜单下面的时候完蛋了,页面卡死了... 解决:tabletree这组件我发现用 ...

  4. 详述C++casting操作

    Casting----类型转换,也就是将数据从一种类型转换到另一种类型的操作.本文首先给出两种类型转换的方式:隐式转换和显式转换,然后简单介绍一下C语言常用的类型转换方式,最后详细叙述C++中常用的三 ...

  5. js基础(使用Canvas画图)

    HTML5的元素提供了一组JavaScript API,让我们可以动态地创建图形和图像. 图形是在一个特定的上下文中创建的,而上下文对象目前有两种.第一种是2D上下文,可以执行原始的绘图操作, 比如: ...

  6. SparkMLlib—协同过滤推荐算法,电影推荐系统,物品喜好推荐

    SparkMLlib-协同过滤推荐算法,电影推荐系统,物品喜好推荐 一.协同过滤 1.1 显示vs隐式反馈 1.2 实例介绍 1.2.1 数据说明 评分数据说明(ratings.data) 用户信息( ...

  7. Java——定时任务调度工具

    一.什么是定时任务调度? 1.常用的定时调度工具:Timer和Quartz 二.Timer简介 1.Timer的定义以及架构 2.Timer示例 三.Timer的定时调度函数 1.schedule的四 ...

  8. jquery的ajax提交时加载处理方法

    1.定义全局的,就是所有的ajax的请求的加载都会出现相同的提示 $(function(){ //加载成功显示的状态 $("#showLoading").ajaxSuccess(f ...

  9. FortiGate防火墙办公网常用配置

    1.建立主备机 2.配置端口 3.配置SD-WAN 4.新建上网路由 5.新建上网策略 6.建立与其他点的IPSec VPN或点对点专线

  10. C#脚本引擎RulesEngine

    当编写应用程序时,经常性需要花费大量的时间与精力处理业务逻辑,往往业务逻辑的变化需要重构或者增加大量代码,对开发测试人员很不友好. 之前在这篇文章说过,可以使用脚本引擎来将我们需要经常变化的代码进行动 ...