Xhprof是facebook开源出来的一个php轻量级的性能分析工具,跟Xdebug类似,但性能开销更低,还可以用在生产环境中,也可以由程序开关来控制是否进行profile。

对于还在使用php5的朋友们,可以安装pecl的xhprof扩展

http://pecl.php.net/package/xhprof

但是因为长时间不更新,针对php7已无法正常安装,可以使用下的地址

https://github.com/longxinH/xhprof/releases

  

一、安装xhprof

下载xhprof源码

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

解压源码包

tar xf v2.1.0.tar.gz

进入目录

cd xhprof-2.1.0/extension

运行phpize,请自行修改你们的phpize路径

/data/nmp/php7/bin/phpize

运行configure,请自行修改你们的php-config路径

./configure --with-php-config=/data/nmp/php7/bin/php-config

编译安装

make && make install

修改php.ini配置,如果extension_dir配置了就不用再配置了,如果没配置,则把该目录指向,扩展编译安装后显示的路径。

extension_dir = "/data/nmp/php7/lib/php/extensions/no-debug-zts-20170718"

[xhprof]
extension = xhprof.so
xhprof.output_dir = /tmp/xhprof

  

二、配置xhprof

我们把扩展目录下的xhprof_html和xhprof_lib复制出来,单独存放到一个目录中。

cp -a xhprof_html /data/wwwroot/xhprof
cp -a xhprof_lib /data/wwwroot/xhprof

针对要分析的项目,可以把如下代码添加到入口文件中:

//开启性能分析
xhprof_enable(XHPROF_FLAGS_MEMORY | XHPROF_FLAGS_CPU);
//php中止时运行的函数
register_shutdown_function(function () {
//停止性能分析
$xhprof_data = xhprof_disable();
if (function_exists('fastcgi_finish_request')) {
fastcgi_finish_request();
}
//引入xhprof库文件,路径请自行修改
$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_runs = new XHProfRuns_Default();
//导出性能分析数据,默认xhprof.output_dir指定的目录
$run_id = $xhprof_runs->save_run($xhprof_data, 'xhprof');
});

数据默认会导出到xhprof.output_dir指定目录,所以需创建该目录,并给予相关权限  

mkdir /tmp/xhprof
chmod -R 777 /tmp/xhprof

这里我们写一个简单程序进行一下演示  

<?php

error_reporting(E_ALL);
ini_set('display_errors', 'on'); //开启性能分析
xhprof_enable(XHPROF_FLAGS_MEMORY | XHPROF_FLAGS_CPU);
//php中止时运行的函数
register_shutdown_function(function () {
//停止性能分析
$xhprof_data = xhprof_disable();
if (function_exists('fastcgi_finish_request')) {
fastcgi_finish_request();
}
//引入xhprof库文件,路径请自行修改
$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_runs = new XHProfRuns_Default();
//导出性能分析数据,默认xhprof.output_dir指定的目录
$run_id = $xhprof_runs->save_run($xhprof_data, 'xhprof');
}); function a()
{
echo 'aaa';
sleep(1);
b();
} function b()
{
echo 'bbb';
sleep(3);
c();
} function c()
{
echo 'ccc';
sleep(5);
} a();

  

三、配置虚拟主机,用来查看分析日志

server {
listen 80;
server_name xhprof.xxx.com;
charset utf-8; root /data/wwwroot/xhprof/xhprof_html;
index index.html index.htm index.php; location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}

我们可以通过访问xhprof.xxx.com来查看分析日志了。

如果点击 [View Full Callgraph] 无法查看,则需装如下工具:

yum install -y libpng
yum install -y graphviz

如果上面安装完后,还是无法显示,并报如下错误:

failed to execute cmd: " dot -Tpng". stderr: `Format: "png" not recognized.
Use one of: canon cmap cmapx cmapx_np dot eps fig gv imap imap_np ismap pic plain plain-ext pov ps ps2 svg svgz tk vml vmlz xdot '

我们需要手动安装 graphviz

https://graphviz.gitlab.io/_pages/Download/Download_source.html

下载源码包,并编译安装

tar xf graphviz.tar.gz
cd graphviz-2.40.1
./configure
make
make install

  

  

使用xhprof对php7程序进行性能分析的更多相关文章

  1. Linux C++程序进行性能分析工具gprof使用入门

    性能分析工具 软件的性能是软件质量的重要考察点,不论是在线服务程序还是离线程序,甚至是终端应用,性能都是用户体验的关键.这里说的性能重大的范畴来讲包括了性能和稳定性两个方面,我们在做软件测试的时候也是 ...

  2. [转]程序进行性能分析工具gprof使用入门

    性能分析工具 软件的性能是软件质量的重要考察点,不论是在线服务程序还是离线程序,甚至是终端应用,性能都是用户体验的关键.这里说的性能重大的范畴来讲包括了性能和稳定性两个方面,我们在做软件测试的时候也是 ...

  3. xDebug + webgrind 对 php 程序进行性能分析

    环境 macOs Sierra php 7.0.8 MAMP Pro 集成环境 背景 最近有一个需要在微信朋友圈上线的 h5,本人做了一个抽奖的接口,也没多想,直接上 php ci(CodeIgnit ...

  4. 实验-使用VisualVM或JConsole进行对程序进行性能分析

    参考资料: 性能分析神器VisualVM java可视化监控工具 完成下列任务: 1.分析内存堆 使用+进行频繁的字符串拼接 2.CPU性能分析 3.线程分析 编程比较以下几个方法所创建的线程 Exe ...

  5. ubuntu上编译和使用easy_profiler对C++程序进行性能分析

    本文首发于个人博客https://kezunlin.me/post/91b7cf13/,欢迎阅读最新内容! tutorial to compile and use esay profiler with ...

  6. 用 dotTrace 进行性能分析时,各种不同性能分析选项的含义和用途

    对 .NET 程序进行性能分析,dotTrace 能应对绝大多数的场景.在开启一个进程进行性能分析之前,我们会看到一些性能分析选项(Profiler Options).本文将介绍这几个选项的含义,并用 ...

  7. 使用VisualVM进行性能分析及调优(转)

    VisualVM 是一款免费的\集成了多个 JDK 命令行工具的可视化工具,它能为您提供强大的分析能力,对 Java 应用程序做性能分析和调优.这些功能包括生成和分析海量数据.跟踪内存泄漏.监控垃圾回 ...

  8. [转]设置Android手机以使用ARM Streamline进行性能分析(二)

    原文因为arm社区改版访问不到了,原作者鲍方,原文地址,这篇是从google cache里挖出来的,希望能帮到要对cocos2dx优化的各位   Posted by Fang Bao, Leave C ...

  9. 使用 VisualVM 进行性能分析及调优

    VisualVM 是一款免费的性能分析工具.它通过 jvmstat.JMX.SA(Serviceability Agent)以及 Attach API 等多种方式从程序运行时获得实时数据,从而进行动态 ...

随机推荐

  1. C6.cpp

    可以将 一个array对象赋给另一个对象 对于下标值出现负数的情况下可以解释为在头指针的位置处向前移动对应的字节 可以使用vector.at(n_elem)来获取元素等价于vector[n_elem] ...

  2. js实现点击按钮复制文本功能

    最近项目活动中用到复制文本功能,发现在chrome中之前的clipboard的demo失效了,查了下发现是因为版本升级导致的.最新用法如下: <!DOCTYPE html> <htm ...

  3. Markdown 简单语法

    标题 文本前面加上 '#' 和一个空格 一级标题 二级标题 三级标题 四级标题 五级标题 六级标题 加粗 文本两侧加上 '**' 加粗文本 斜体 文本两侧加上 '*' 斜体文本 斜体加粗 文本两侧加上 ...

  4. [UnityShader基础]07.MaterialPropertyDrawer

    参考链接: https://blog.csdn.net/e295166319/article/details/60141677 https://docs.unity3d.com/ScriptRefer ...

  5. Oracle从入门到精通----学习笔记

    书名:<Oracle从入门到精通:视频实战版>秦靖.刘存勇等编著 第4章 SQL基础 1.SQL语言分类 数据定义语言 --- DDL,Data Definition Language 数 ...

  6. 【C语言基础】什么是数据类型?

    基本数据类型 整数 整型 — — int     ---- 4 字节 短整型 — — short  int     ---- 2 字节 长整型 — — long  int     ---- 8 字节 ...

  7. Mybatis pageHelper.startPage(...)是物理分页

    使用PageHelper.startPage(...)进行物理分页 业务需求只显示其中的100条数据 之前是在业务逻辑里对参数limit进行了处理 后来试试sql的limit查询100条数据 但是不确 ...

  8. 对BRD、MRD、PRD、FSD四类产品文档的理解

    查阅相关文献并总结了在产品生命周期内比较重要的四类文档—BRD.MRD.PRD.FSD各自的含义以及用法. BRD 1.含义:BRD(business requirement document)— 商 ...

  9. 关于 early Z 与 z-prepass

    今天在考虑优化MOBA项目中的树木时(采用了ALPHATEST)时,与同事讨论中深入了解了这两个概念. 以前居然不知道有early z的存在,真是惭愧.... 上个链接: 深入剖析GPU Early ...

  10. 【读书笔记】segment routing mpls数据平面-1