php修改学生信息代码_简单学习PHP中的层次性能分析器

2023-11-19

在 PHP 中,我们需要进行调试的时候,一般都会使用 memory_get_usage() 看下内存的使用情况。但如果想看当前的脚本 CPU 的占用情况就没有什么现成的函数了。不过,PHP 也为我们提供了一个扩展:XHProf ,这是由 FaceBook 开源的一个扩展,它可以帮我们看到当前脚本运行时的一些性能情况。

什么是 XHProf

XHProf 是一个轻量级的分层性能测量分析器。 在数据收集阶段,它跟踪调用次数与测量数据,展示程序动态调用的弧线图。 它在报告、后期处理阶段计算了独占的性能度量,例如运行经过的时间、CPU 计算时间和内存开销。 函数性能报告可以由调用者和被调用者终止。 在数据搜集阶段 XHProf 通过调用图的循环来检测递归函数,通过赋予唯一的深度名称来避免递归调用的循环。

简单来说,XHProf 就是能为我们收集很多程序去得时的系统状态,并且它自带一套在线图表工具,能够为我们提供详尽的图表信息。

安装

直接在 PECL 下载安装扩展包即可。和其它的扩展安装并没有什么两样,这个扩展一直在更新维护状态中,所以对于 PHP7 版本都是完美支持的。

命令行使用

xhprof_enable(XHPROF_FLAGS_NO_BUILTINS | XHPROF_FLAGS_CPU | XHPROF_FLAGS_MEMORY);

//xhprof_enable( XHPROF_FLAGS_CPU | XHPROF_FLAGS_MEMORY);

//xhprof_enable( XHPROF_FLAGS_MEMORY);

//xhprof_enable();

for ($i = 0; $i <= 1000; $i++) {
    $a = $i * $i;
}

function test_application(){
    for ($i = 0; $i <= 1000; $i++) {
            $a = $i * $i;
    }
}

test_application();


$xhprof_data = xhprof_disable();

print_r($xhprof_data);

// Array
// (
//     [main()==>test_application] => Array
//         (
//             [ct] => 1
//             [wt] => 16
//             [cpu] => 21
//             [mu] => 848
//             [pmu] => 0
//         )

//     [main()] => Array
//         (
//             [ct] => 1
//             [wt] => 115
//             [cpu] => 115
//             [mu] => 1416
//             [pmu] => 0
//         )

// )

使用 xhprof_enable() 启用分析器,它的参数是几个常量,大概的意思就是显示 CPU 信息、内存信息等,如果没有参数的话则只会返回 ct 、 wt 这两个参数。

调用 xhprof_disable() 结束分析并返回分析结果,返回值的内容包括 main 主函数的运行情况,也就是我们当前页面测试代码的情况。还有调用的函数 test_application() 函数的性能情况。具体内容为:

  • ct:调用次数
  • wt:等待运行时长,毫秒
  • cpu:cpu 运行时长,毫秒
  • mu:内存使用,字节
  • pmu:内存使用峰值

没错,就是这么简单的内容。通过两个函数的调用我们就能看到当前脚本程序的运行状态,占用了多少内存、耗费了多少 cpu 时长。当然,更方便的是,它还可以通过 web 页面显示更为详细的信息。

web 查看结果报告

首先,我们需要做一些准备工作。一是要安装一个 graphviz 用于图形绘制,二是修改 php.ini 文件的结果存放目录,三是拷贝源码中的分析器代码并修改一下我们之前的测试代码。

yum install graphviz

CentOS 系统中我们直接使用 yum 就可以安装 graphviz 。然后我们在 php.ini 文件中为 xhprof 指定一下输出目录。

xhprof.output_dir=/tmp

接下来,我们需要将源码文件中的 xhporf_html 目录和 xhporf_lib 目录拷贝出来放到项目文件下。然后修改代码来保存性能分析的结果。

// ..... 上面的代码
$xhprof_data = xhprof_disable();

require 'xhprof_lib/utils/xhprof_lib.php';
require 'xhprof_lib/utils/xhprof_runs.php';

$xhprofRuns = new XHProfRuns_Default();
$runId = $xhprofRuns->save_run($xhprof_data, 'xhprof_test');

echo 'http://192.168.56.102/index.php?run=' . $runId . '&source=xhprof_test';

然后我们需要在 xhporf_html 搭起服务器,在这里我就用简单的 php -S 命令运行起来。

cd xhprof_html/
php -S 0.0.0.0:80

最后用上面输出的链接来访问这个页面,就可以看到相关的信息了。

总结

今天的测试代码只是简单的学习入门了一下 xhporf 的使用。其实这个扩展以及这套分析工具是可以集成到我们真实项目的框架中的。这样,在测试环境我们就可以很好地监控当前程序的运行状态。不过,还是不太建议放在正式环境中使用,毕竟 Debug 或者这种性能分析的东西都不要对外,在正式环境,我们可以在命令行进行分析调优。

测试代码:

https://github.com/zhangyue0503/dev-blog/blob/master/php/202006/source/%E7%AE%80%E5%8D%95%E5%AD%A6%E4%B9%A0PHP%E4%B8%AD%E7%9A%84%E5%B1%82%E6%AC%A1%E6%80%A7%E8%83%BD%E5%88%86%E6%9E%90%E5%99%A8.php

参考文档:

https://www.php.net/manual/zh/book.xhprof.php

使用XHProf查找PHP性能瓶颈_程序猿成长计划 - SegmentFault 思否

===============
关注公众号:【硬核项目经理】获取最新文章
添加微信/QQ好友:【xiaoyuezigonggong/149844827】免费得PHP、项目管理学习资料
知乎、公众号、抖音、头条搜索【硬核项目经理】
B站ID:482780532

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

php修改学生信息代码_简单学习PHP中的层次性能分析器 的相关文章

  • 阿里云ECS服务器连接MongoDB

    第一次接触MongoDB 第一次部署 将一些步骤整理出来 希望以后会用到 也希望能帮组到有这方面需求的小伙伴 设备说明 服务器为阿里云ECS服务器 网络为专有网络VPC Mango为买的阿里云Mango 各种申请事项和购买才做就不说 下面开
  • 查mysql版本的命令

    首先找到安装mysql的安装位置 我的是在D盘下tools mysql zip mysql 8 0 19 winx64 之后点击安装位置的路径 输入cmd 按enter键 进入黑窗格如图所示 输入命令mysql version 第二种win
  • STM32的CAN过滤器

    最近开始给足底压力设备加外设 这里外设个主设备之间通过can总线连接 之前使用过can总线 但是对can的过滤器不是很理解 所以这里就借机整理一下 原文地址 再谈STM32的CAN过滤器 bxCAN的过滤器的4种工作模式以及使用方法总结 S
  • 运行.sh文件报错-bash: ./download_weights.sh: Permission denied

    运行 sh文件 download weights sh 命令运行报错 bash download weights sh Permission denied 此时这个文件是不可执行的 用 ll 命令查看文件的访问权限 rw r r 1 G19
  • QT程序用windeployqt打包后无法正常启动

    QT程序用windeployqt打包后无法正常启动 显示 应用程序无法正常启动 0xc000007b 请单击确定关闭应用程序 查看exe程序所在文件夹 qt的关键dll都已经拷贝到了 考虑到我的程序还依赖其他的dll工程 虽然依赖的dll也
  • 用ClickHouse 文件表引擎快速查询分析文件数据

    有时我们需要快速查询分析文件数据 正常流程需要在数据库中创建表 然后利用工具或编码导入数据 这时才能在数据库中查询分析 利用ClickHouse文件引擎可以快速查询文件数据 本文首先介绍ClickHouse文件引擎 然后介绍如何快速实现查询
  • MySQL基础(非常全)

    MySQL基础 一 MySQL概述 1 什么是数据库 答 数据的仓库 如 在ATM的示例中我们创建了一个 db 目录 称其为数据库 2 什么是 MySQL Oracle SQLite Access MS SQL Server等 答 他们均是
  • 【统一身份认证】详细讲解

    一 什么是统一身份认证 二 统一身份认证的构成 1 角色模型 用户 角色 权限 2 实现 前言
  • win10使用vscode+anaconda+Python环境配置(解决无法加载文件 \WindowsPowerShell\profile.ps1,因为在此系统上禁止运行脚本)

    win10使用vscode anaconda Python环境配置 解决无法加载文件 WindowsPowerShell profile ps1 因为在此系统上禁止运行脚本 安装anaconda 为conda设置环境变量 conda 环境初
  • Linux文件权限

    Linux用户分为 拥有者 组群 Group 其他 other Linux系統中 预设的情況下 系統中所有的帐号与一般身份使用者 以及root的相关信息 都是记录在 etc passwd文件中 每个人的密码则是记录在 etc shadow文
  • C++11 标准新特性: 右值引用与转移语义

    新特性的目的 右值引用 Rvalue Referene 是 C 新标准 C 11 11 代表 2011 年 中引入的新特性 它实现了转移语义 Move Sementics 和精确传递 Perfect Forwarding 它的主要目的有两个
  • Linux服务器中查看进程的四种方法

    查看进程的四种方法 1 使用ps aux命令来查看 能以简单列表的形式显示出进程信息 ps aux用于报告当前系统的进程状态 可以搭配kill指令随时中断 删除不必要的程序 ps命令是最基本同时也是非常强大的进程查看命令 使用该命令可以确定
  • PTA乙级题目练习-卡拉兹(Callatz)猜想

    卡拉兹 Callatz 猜想 对任何一个正整数 n 如果它是偶数 那么把它砍掉一半 如果它是奇数 那么把 3n 1 砍掉一半 这样一直反复砍下去 最后一定在某一步得到 n 1 卡拉兹在 1950 年的世界数学家大会上公布了这个猜想 传说当时
  • 静态编译 java_动态编译和静态编译及Java执行

    静态编译就是在编译的时候把你所有的模块都编译进exe里去 当你启动这个exe的时候所有模块都加载进来了 你写小程序没问题 但程序一大 加载的过程 就是当你运行程序时初始化的过程 就比较费力了 大多数ppc的硬件配置还是很一般的 动态编译就不
  • 新书《活用UML-需求分析高手》详细大纲(持续更新中)

    本书目前正在编写中 大纲可能会随时调整 欢迎各位朋友提出宝贵意见 欢迎到umlonline网站学习 活用UML 需求分析高手 课程在线版本 http www umlonline org school forum 26 1 html 目 录第
  • vs添加对dll的引用

    我们在使用vs进行开发调试的时候经常会遇到一个问题 就是当我们的主工程引用到其他工程更新的dll 我们经常采用copy到工程目录的方法 亦或者当我们的多个工程引用到同一个dll文件的时候 我们怎么来配置 1 将dll配置到环境变量 这种方法
  • 以渲染和ue独立游戏为接下来的主要学习任务。(独立游戏就是为单干做准备,不为跳槽涨薪,目标就是单干,找另外一种可能。)

    这段时间工作不好找 即使招聘网站上找我聊的 薪水也没有什么吸引力 所以不考虑跳槽 直接把精力放在渲染上 说不准还能涨涨薪 拿个年终奖 这条被哥们否定了 内部涨薪很困难 即使以前确实是从1万七涨到2万 也可能是因为人力看过流水 知道我是从两万
  • 微信小程序游戏怎么开发入门教程

    微信小程序游戏开发是现在比较热门的小程序类型开发项目 对于开发人员而言 怎么开发微信小程序游戏呢 今天小编分享一篇小游戏的入门开发教程 希望对微信小程序制作开发人员提供参考 第一步 注册一个小程序账号 在官方注册一个微信小程序账号 注册申请
  • springboot+thymeleaf+mybatis简单获取数据库数据

    1 数据库准备 建好需要的表 这里我的表是info list 2 文件创建 实体类Info public class Info private int id private String name public int getId retu

随机推荐

  • Android平台RTMP

    我们需要怎样的直播播放器 很多开发者在跟我聊天的时候 经常问我 为什么一个RTMP或RTSP播放器 你们需要设计那么多的接口 真的有必要吗 带着这样的疑惑 我们今天聊聊Android平台RTMP RTSP播放器常规功能 如软硬解码设置 实时
  • 5V转±12V无变压器双boost电路

    最近有个新项目 需要 10V范围的模拟量输出 非隔离 对于5V以下供电的控制板而言单端输出绝对没问题 可现在需要有正负输出 是少不了正负电源的 因此准备设计一个5V转 12V的电源 然后选择一个双向供电的运放 来实现单端模拟量信号向双向模拟
  • Blob类型介绍以及查看

    最近看到一个字段的类型是Blob有点懵逼 从Navigate上看只能看到一个 Blob 实际你去仔细看的话 分线字段大小不为空 而且每个大小不一样 说明该字段不仅不为空而且还有值且不一样 那这个Blob是什么呢 大名叫做binary lar
  • 程序员如何乘风破浪?从数据库历史看技术人发展

    2009 年我国数据库软件市场规模为 35 03 亿元 2017 年我国数据库软件市场规模增长至 120 00 亿元 8年时间内 我国数据库软件市场始终保持平稳增长 年均复合增长率为 17 5 且增速呈现递增趋势 根据中研产业研究院估计 到
  • 深入浅出Spring AOP面向切面编程实现原理方法

    1 什么是AOP AOP Aspect Oriented Programming 意为 面向切面编程 通过预编译方式和运行期动态代理实现在不修改源代码的情况下 给程序动态统一添加功能的一种技术 可以理解成动态代理 是Spring框架中的一个
  • Web前端学习(六)HTML5列表标签

    列表标签 ul li 语法 ul li 精彩少年 li li 美丽突然出现 li li 触动心灵的旋律 li ul 有序列表 ol li 语法 ol li 前端开发面试心法 li li 零基础学习html li li JavaScript全
  • Linux内存逆向映射(reverse mapping)技术的前世今生

    本文来自于微信公众号Linux阅码场 一 前言 数学大师陈省身有一句话是这样说的 了解历史的变化是了解这门学科的一个步骤 今天 我把这句话应用到一个具体的Linux模块 了解逆向映射的最好的方法是了解它的历史 本文介绍了Linux内核中的逆
  • Web网络安全-----Log4j高危漏洞原理及修复

    系列文章目录 Web网络安全 红蓝攻防之信息收集 文章目录 系列文章目录 什么是Log4j 一 Log4j漏洞 二 漏洞产生原因 1 什么是Lookups机制 2 怎么利用JNDI进行注入 JNDI简介 LADP RMI 三 Log4j漏洞
  • 2021/8/10补题A - Min Difference

    A Min Difference 题目大意 题解 1 暴力的方法 2 双指针 优化查询 3 所有元素打上标签扔进一个数组 和1异曲同工 题目大意 给定数组a和数组b 数组a长度为n 数组b长度为m 你可以从数组a和数组b中各选一个数 问这两
  • 解决Centos7 下 root账号 远程连接FTP,vsftpd 提示 530 Login incorrect 问题

    三步走 1 vim etc vsftpd user list 注释掉 root 2 vim etc vsftpd ftpusers 同样注释掉 root 3 重启服务 systemctl restart vsftpd service 最后测
  • 使用docker搭建gitlab服务器

    一 拉取gitalb镜像 1 使用docker search gitalb gitlab 搜索有哪些镜像 2 docker pull gitlab gitlab ce 拉取镜像 这里拉取社区版的 3 创建容器 先使用默认挂载目录 随机端口
  • 什么是矩阵的范数

    原文地址 在介绍主题之前 先来谈一个非常重要的数学思维方法 几何方法 在大学之前 我们学习过一次函数 二次函数 三角函数 指数函数 对数函数等 方程则是求函数的零点 到了大学 我们学微积分 复变函数 实变函数 泛函等 我们一直都在学习和研究
  • Springboot+Pagehelper+Vue 完成分页显示操作

    Springboot Pagehelper Vue 完成分页显示操作 在开发的过程最常用也是最常见的就是表格的分页查询了 在开发的时候碰到了这个需求 所以今天讲讲怎么把Pagehelper集成到SpringBoot并结合前端框架Vue 完成
  • 如何正确的关闭 MFC 线程

    前言 近日在网上看到很多人问及如何关闭一下线程 但是我看网上给出的并不详细 而且有些方法还是错误的 小弟在此拙作一篇 不谈别的 只谈及如何正确的关闭MFC的线程 至于Win32和C RunTime的线程暂不涉及 一 关于MFC的线程 MFC
  • JS中的发布-订阅

    发布订阅模式 什么是发布 订阅模式 发布 订阅模式的实现 发布 订阅实现思路 总结 优点 缺点 Vue 中的实现 观察者模式和发布订阅的区别 观察者模式 发布订阅模式 什么是发布 订阅模式 发布 订阅模式其实是一种对象间一对多的依赖关系 当
  • Kubernetes笔记(3) - 资源管理基础

    Kubernetes系统将一切事物都抽象为API资源 其遵循REST架构风格组织并管理这些资源及其对象 同时还支持通过标准的HTTP方法 POST PUT PATCH DELETE和GET 对资源进行增 删 改 查等管理操作 Kuberne
  • tcp三次握手和四次挥手的过程

    TCP是面向连接的 无论哪一方向另一方发送数据之前 都必须先在双方之间建立一条连接 在TCP IP协议中 TCP 协议提供可靠的连接服务 连接是通过三次握手进行初始化的 三次握手的目的是同步连接双方的序列号和确认号 并交换 TCP窗口大小信
  • 简述JAVA集合框架

    简述JAVA集合框架 对常用的数据结构和算法做了一些接口和具体实现接口的类 所有抽象出来的数据结构统称为Java集合框架 在具体应用时 不必考虑数据结构和算法实现细节 只需要用这些类创建出来一些对象 然后直接应用就可以了 这样就大大提高了编
  • Nginx中代理的上下文路径设置

    Nginx中代理的上下文路径设置 实际配置nginx的时候 在Location段中配置的路径 request uri 以及代理指令 proxy pass 中设置的上下文路径的组合不同 最后实现的结果就不一样 例子 加入请求nginx服务的U
  • php修改学生信息代码_简单学习PHP中的层次性能分析器

    在 PHP 中 我们需要进行调试的时候 一般都会使用 memory get usage 看下内存的使用情况 但如果想看当前的脚本 CPU 的占用情况就没有什么现成的函数了 不过 PHP 也为我们提供了一个扩展 XHProf 这是由 Face