当前位置: 首页 > news >正文

Xhprof php性能测试工具用法小结

为什么80%的码农都做不了架构师?>>>   hot3.png

简介

改进php应用程序的性能是一项非常耗时耗力的工作,但是究竟程序中是哪些函数消耗掉了大部分执行时间,这通常都不是非常明显的。

Xhprof 是facebook推出的轻量级的php性能分析工具,下面简单介绍下Xhprof的安装及使用。

准备

  1. 下载:
    https://pecl.php.net/package/xhprof xhprof-0.9.4.tgz 官网
  2. 展示图形界面需要
    yum install graphviz.

安装

  1. 编译扩展
 wget https://pecl.php.net/get/xhprof-0.9.4.tgz
 tar xzf xhprof-0.9.4.tgz
 cd xhprof-0.9.4
 cd extension
 /usr/local/bin/phpize 
 ./configure --with-php-config=/usr/local/bin/php-config
 make && make install

输入图片说明

  1. 增加以下代码到php.ini文件中
[xhprof]
extension=/usr/local/lib/php/extensions/no-debug-non-zts-20121212/xhprof.so
xhprof.output_dir="/www/xhprof"
  1. 重启 php
service php-fpm restart

输入图片说明
xhprof安装成功
4. 拷贝文件 解压后的_xhprof-0.9.4_目录下有两个目录_xhprof_html_,_xhprof_lib_需要用到,拷贝到网站目录

  cd xhprof-0.9.4
  cp xhprof_* -R /www

使用

  1. 简单示例
    _xhprof-0.9.4_目录下 有个examples目录,有个sample.php示例可以参考下,下面列出个简单用法流程
//开始分析
//XHPROF_FLAGS_CPU 使输出的性能数据中添加 CPU 数据。
//XHPROF_FLAGS_MEMORY 使输出的性能数据中添加内存数据。
//XHPROF_FLAGS_NO_BUILTINS (integer) 使得跳过所有内置(内部)函数。
//如果都监控多个可以用XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY
xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);
//程序代码执行
 ......
include_once "xhprof_lib/utils/xhprof_lib.php";   
include_once "xhprof_lib/utils/xhprof_runs.php";   
$namespace = 'demo';
// 停止分析,获取数据,保存数据
$xhprof_data = xhprof_disable();
$xhprof_runs = new XHProfRuns_Default();
$run_id = $xhprof_runs->save_run($xhprof_data, $namespace);
//查看运行结果的url  
//run_id,source
//localhost 用自己的域名替换 
echo "http://localhost/xhprof_html/index.php?run=".$run_id."&source=".$namespace;
  1. 更好的方式
    要分析现有的项目,不可能修改项目的源代码,所以我们可以利用php的auto_prepend_fileregister_shutdown_function来注入代码,在这里我们用auto_prepend_file方式来示例. 增加以下代码到php.ini文件中
auto_prepend_file = "/data/www/header.php"
auto_append_file =  "/data/www/footer.php"

header.php 文件内容

$xhprof_switch = false;
//为了减少性能开销,1000次只有一次进行性能采集
//判断cookie的值,可以方便灰度测试
if (isset($_COOKIE['xhprof_on'])) {
    $xhprof_switch = true;
} else {
    if (mt_rand(1, 1000) === 1) {
        $xhprof_switch = true;
    }
}
if ($xhprof_switch) {
   if (extension_loaded('xhprof')) {
       include_once '/www/xhprof_lib/utils/xhprof_lib.php';
       include_once '/www/xhprof_lib/utils/xhprof_runs.php';
       xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);
   }
}

footer.php 文件内容

if ($xhprof_switch && extension_loaded('xhprof')) {
     $namespace = 'demo';
     $xhprof_data = xhprof_disable();
     $xhprof_runs = new XHProfRuns_Default();
     $run_id = $xhprof_runs->save_run($xhprof_data, $namespace);
}
  1. 图形界面 源代码中的_xhprof_html_目录我们已经放到web目录了,直接进行访问http://xxx/xhprof_html/index.php 可以看到图形界面了,点击一个列表进去就可以看到如下统计表格了 输入图片说明

    Wall Time:总执行时间

    CUP Time:CPU占用时间

    Memory Usage:内存占用率

    Peak Memory Usage:内存峰值

    Number of Calls:方法的调用次数

    点击 Callgraph 可以看到酷酷的图形展示

扩展阅读

  • 使用 XHProf 分析你的 PHP 程序
  • 使用xhprof进行线上PHP性能追踪及分析

转载于:https://my.oschina.net/2688/blog/608169

相关文章:

  • jsp:forward标签与response.sendRedirect()的区别
  • linux 配置IP地址
  • Jsp中的request对象
  • curl使用
  • Jsp中的session对象
  • Jsp中的application对象
  • 3.5 Templates -- Binding Element Attributes(绑定元素属性)
  • Sequential projection learning for hashing阅读笔记
  • Jsp中的response对象
  • Jsp中的Cookie对象
  • Jsp中的Exception对象
  • Oracle EBS - 工单状态
  • JDBC方式连接数据库
  • 排序降低---------------------
  • jsp:useBean标签
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • Angular 4.x 动态创建组件
  • IOS评论框不贴底(ios12新bug)
  • Javascripit类型转换比较那点事儿,双等号(==)
  • Java编程基础24——递归练习
  • Mac 鼠须管 Rime 输入法 安装五笔输入法 教程
  • PHP 7 修改了什么呢 -- 2
  • React的组件模式
  • Redis在Web项目中的应用与实践
  • Sequelize 中文文档 v4 - Getting started - 入门
  • socket.io+express实现聊天室的思考(三)
  • 爱情 北京女病人
  • 服务器之间,相同帐号,实现免密钥登录
  • 实习面试笔记
  • 世界上最简单的无等待算法(getAndIncrement)
  • 蚂蚁金服CTO程立:真正的技术革命才刚刚开始
  • ​决定德拉瓦州地区版图的关键历史事件
  • # centos7下FFmpeg环境部署记录
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (黑马C++)L06 重载与继承
  • (三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)
  • (一)使用Mybatis实现在student数据库中插入一个学生信息
  • (转)详解PHP处理密码的几种方式
  • (转)自己动手搭建Nginx+memcache+xdebug+php运行环境绿色版 For windows版
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • ... 是什么 ?... 有什么用处?
  • ./configure,make,make install的作用
  • .halo勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .net core使用RPC方式进行高效的HTTP服务访问
  • .NET Windows:删除文件夹后立即判断,有可能依然存在
  • .NET/C# 中设置当发生某个特定异常时进入断点(不借助 Visual Studio 的纯代码实现)
  • .netcore 如何获取系统中所有session_如何把百度推广中获取的线索(基木鱼,电话,百度商桥等)同步到企业微信或者企业CRM等企业营销系统中...
  • .NET分布式缓存Memcached从入门到实战
  • @data注解_SpringBoot 使用WebSocket打造在线聊天室(基于注解)
  • @kafkalistener消费不到消息_消息队列对战之RabbitMq 大战 kafka
  • @Resource和@Autowired的区别
  • @基于大模型的旅游路线推荐方案
  • []C/C++读取串口接收到的数据程序
  • [2018-01-08] Python强化周的第一天