性能测试 | 性能工具你用对了吗?

news2024/11/25 16:36:42

导读

要对客户端应用程序进行性能测试,需要了解用户场景和性能目标,选择合适的工具或方法来衡量和改进性能。其中涉及的性能指标有很多,如cpu使用率、内存、磁盘IO,相对应的性能观察工具也层出不穷,面对这些工具我们该如何选择呢?

当客户端系统出现性能问题时,我们一般的做法都是打开任务管理器,然后单击“性能”。可以看到系统的CPU、内存、磁盘和网络等使用情况。

然而这种只能宏观看到整体系统的性能使用情况,要想看具体的某个进程的性能,还可以点击“详细信息”就能看到每个进程的资源使用情况,如果遇到CUP使用率很高或是系统运行缓慢时,您可以在此选项卡中找到占用资源比较大的程序。

当然打开“性能”底部的资源监视器(Resource Manager),也可查看每个进程的使用情况。

问:

上面通过任务管理器,可以查看系统和进程的性能情况。如果有个提测修改是优化某个线程的cpu占用呢,且这个线程占用cpu本身就不高,甚至不超过1%,此时优化前后通过任务管理器是观察不出来的,那么我们该如何选择工具验证呢?

下面,我就拿个实际案例和大家分享一下,如何验证这种“微观”的性能占用。

开发提测:优化模块内部工作线程的高cpu使用。

当拿到修改点后,我们首先要“看”--看修改内容;然后是“定”--定测试方案和工具;最后是“分析”--分析结果。

验证方法一

这里我们选择process Explorer工具,先找到加载线程的主进程(如360rp.exe),然后右键“Properties”可以看到线程信息。

找到我们此次验证的重点线程! CleanupAllClientRules(如下图),查看cpu和Cycles Delta占用情况,从截图可以看到此线程的cpu和Cycles Delta相对来说比较高,值越大说明线程单位时间内使用的CPU算力越多。

解释下关于cpu相关概念

指令周期:是指计算机从取指到指令执行完毕的时间。分为三步:Fetch(取指)、Decode(译码)、Execute(执行指令)。

CPU周期:CPU内部的操作速度很快,但是访问内存的速度却要慢很多。每一条指令都需要从内存里面加载而来,所以我们一般把从内存里读取一条指令的最短时间,称为CPU周期。

时钟周期:也称为振荡周期,是计算机中最基本的、最小的时间单位。CPU主频(HZ)=1/CPU时钟周期(s)。
一个指令周期,包含多个CPU周期,而一个CPU周期包含多个时钟周期

除了观察Cycles Delta(周期增量),我们还需要记录底部的参数Cycles,然后在替换新文件后,抓取相同时间内的cpu使用情况,如下:

替换新文件后,我们就看不到! CleanupAllClientRules线程的cpu和Cycles Delta占用情况了(或非常微小),然后再对比下线程的Cycles值,同样采集了6分钟的效果,修改前Cycles是136462509,修改后是8582798,有明显的下降。

通过上面的验证我们就可以得出结论,新文件在解决线程cpu占用上确实有效果的。

验证方法二

除了上面的方法,我们还可以使用另外一个工具WPT来验证。

WPT是微软官方的性能测试工具,集成在Windows SDK中,它包含两个主要的工具。

WPR(Windows Performance Recorder)是一个事件记录工具,使用它可以监测系统状态(CPU、磁盘I/O、堆分配、栈调用…),并生成一个.etl(Event trace log)日志文件。WPA(Windows Performance Analyzer)是一个日志分析工具,使用它可以对WPR生成的.etl日志文件加以分析得出方便人阅读的数据图表。

WPT的安装

1.下载Windows SDK

https://developer.microsoft.com/zh-cn/windows/downloads/sdk-archive/

2.双击安装winsdksetup.exe进行安装,默认路径,直接下一步

3.记住勾选Windows性能工具包英文名为Windows Performance Toolkit

4.等待安装结束即可

5.WPT默认目录为C:\Program Files (x86)\Windows Kits\10\Windows Performance Toolkit\可以在这个目录下找到WPR和WPA

Ⅰ.WPR的使用--- 抓取日志

1.直接进入到C:\Program Files (x86)\Windows Kits\10\Windows Performance Toolkit\,双击运行WPRUI.exe

2.根据需求选择要记录的指标(如CPU usage),然后点击start。

备注:下面对一些指标的简单说明。

◆ 截图上第一区域:

想监控CPU,就把CPU usage勾上;

想监控文件I/O,就把File I/O activity勾上;

想监控堆,就把Heap usage勾上

◆ 截图第三区域:

可以验证不同场景,比如场景选:Boot,详细程序选:Verbose, 记录模式选:File, 迭代次数选:1。这将重新启动Windows,并捕获启动过程中的所有活动。重新启动后,让倒数计时为0。

3.点击Save按扭,结束记录

4.点击底部的save保存日志文件

Ⅱ.WPA的使用 --- 分析日志

1.点击保存日志完成页面上的‘Open in WPA’,直接打开WPR生成的日志。

或者进入到C:\Program Files (x86)\Windows Kits\10\Windows Performance Toolkit\双击运行wpa.exe,选择File->Open,选择刚刚用WPR生成的日志文件

2.想要分析某一类的数据话(如Computation),在打开日志后,然后双击左侧栏要分析的数据(如Computation)

3.因为要分析线程,所以我们要选择过滤“Utilization By Process and Thread*”

4.选择进程可右键Filter to Selection进行过滤,过滤后只显示此进程内容

5.下图是过滤后的信息,可以看到5744的线程就是对应的! CleanupAllClientRules线程,在两分钟采样时间内命中了13个采样点,时间总和是4.9ms

6.然后用同样方法替换新文件后也抓取了2分钟,下面截图中的两个线程id对应的都不是! CleanupAllClientRules,可见优化后的线程在此期间使用cpu算力极低,没有命中采样点,其实从波形图也可直观的观察到效果。

总结

到此我们用到了两款工具,其实它们的功能远比文中描述的还要强大,无论是大而全的工具,还是小而精的工具,它们都有着自己的优势和缺陷,了解每个工具的特性,才能方便我们做出更合适的选择,然后有针对性的进行性能测试。

目前尽管敏捷和DevOps环境采用了持续集成,但性能测试通常还是一个手动过程,性能测试的未来在于在应用程序生命周期的所有阶段实现自动化测试,为此,有必要在持续集成的上下文中自动运行测试,尽可能多的将性能测试纳入自动化。

行动吧,在路上总比一直观望的要好,未来的你肯定会感 谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入扣群: 320231853,里面有各种软件测试+开发资料和技术可以一起交流学习哦。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1652481.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

24_Scala集合Map

文章目录 Scala集合Map1.构建Map2.增删改查3.Map的get操作细节 Scala集合Map –默认immutable –概念和Java一致 1.构建Map –创建kv键值对 && kv键值对的表达 –创建immutable map –创建mutable map //1.1 构建一个kv键值对 val kv "a" -> 1 print…

嵌入式Linux开发如何查看应用所链接的动态库

在开发中我们常常需要查看一个应用究竟链接了哪些对应的动态库 桌面linux的使用方法不赘述,网上资料有很多,对于嵌入式linux开发中,我们在ubuntu中使用ldd 是不行的 应该使用

全面升级企业网络安全 迈入SASE新时代

随着数字化业务、云计算、物联网和人工智能等技术的飞速发展,企业的业务部署环境日渐多样化,企业数据的存储由传统的数据中心向云端和SaaS迁移。远程移动设备办公模式的普及,企业多分支机构的加速设立,也使得企业业务系统的用户范…

数据结构-线性表-应用题-2.2-14

1&#xff09;算法基本设计思想&#xff1a; 2&#xff09;c语言描述&#xff1a; #define INT_MAX 0X7FFFFFFF int abs_(int a) {//绝对值if(a<0) return -a;else return a; } bool min(int a,int b,int c){if(a<b&&a<c) return true;else return false; } …

【Kali Linux工具篇】使用Aircrack-ng破解wifi密码

前期准备 1、一个无线网卡 2、密钥爆破字典 实站过程 1、设置wlan为监听模式 airmon-ng start wlan0 #开启网卡wlan0监听模式 iwconfig #查看网卡状态&#xff0c;发现wlan0mon&#xff0c;表示已开启成功2、探测附近WiFi airdump-ng wlan0monBSSID 代表…

遥感+大数据为智慧无人农场按下“倍速键”

春回大地万象“耕”新&#xff0c;在襄阳市襄州区张家集镇近2000亩小麦绿意盎然、勃勃生机。 湖北绿神农业科技有限公司的生产经理王真指着监控室的电脑屏幕&#xff0c;告诉记者在与珈和科技合作开发的农田遥感监测平台上各类农田数据一目了然&#xff0c;为实现农业智能化管理…

await执行顺序

用一个简单的例子来说明&#xff0c;await到底在等待什么 求代码的打印顺序 function testAsy(x) {return new Promise((resolve) > {setTimeout(() > {resolve(x);}, 3000);}); } async function testAwt() {console.log("async开始执行");// 最先打印let r…

vue的css深度选择器 deep /deep/

作用及概念 当 <style> 标签有 scoped 属性时&#xff0c;它的 CSS 只作用于当前组件中的元素&#xff0c;父组件的样式将不会渗透到子组件。在vue中是这样描述的&#xff1a; 处于 scoped 样式中的选择器如果想要做更“深度”的选择&#xff0c;也即&#xff1a;影响到子…

【web网页制作】html+css旅游家乡河南开封主题网页制作(4页面)【附源码】

HTMLCSS家乡河南主题网页目录 &#x1f354;涉及知识&#x1f964;写在前面&#x1f367;一、网页主题&#x1f333;二、页面效果Page1 首页Page2 开封游玩Page 3 开封美食Page4 留言 &#x1f308; 三、网页架构与技术3.1 脑海构思3.2 整体布局3.3 技术说明书 &#x1f40b;四…

手拿滑块撕瑞数 我叫超弟你记住!!什么腾讯滑块、数美、阿里通通拿下!最新版2024.5.8号

本文章非标题党&#xff0c;可提供主流验证码解决方案及成品、补环境框架、逆向教学 不论你是逆向小白、亦或是需求方都可通过本文章各取所需&#xff01;&#xff01; 废话不多说&#xff0c;老规矩&#xff0c;附上腾讯旗下验证码程序运行图&#xff0c;附程序运行时间 &…

论文阅读:RHO-1:Not All Tokens Are What You Need 选择你需要的 Tokens 参与训练

论文链接&#xff1a;https://arxiv.org/abs/2404.07965 以往的语言模型预训练方法对所有训练 token 统一采用 next-token 预测损失。作者认为“并非语料库中的所有 token 对语言模型训练都同样重要”&#xff0c;这是对这一规范的挑战。作者的初步分析深入研究了语言模型的 t…

React18+TS+NestJS+GraphQL 全栈开发在线教育平台

高质量平台级应用流行全栈技术实用职场技巧通用面试策略React18TSNestJSGraphQL 全栈开发在线教育平台&#xff08;完结&#xff09; 黑石老师&#xff0c;大厂技术专家&#xff0c;深耕前后端十多年。发现很多的前端同学都面临如下的职业困扰&#xff1a;没有能拿的出手的面试…

数字人制作原理:捕捉、建模与合成

在感知系统中&#xff0c;我们与外部合作者一起创建逼真的 3D 人类&#xff0c;其行为可以像虚拟世界中的真实人类一样。这项工作在今天有许多实际应用&#xff0c;并且对于元宇宙的未来至关重要。但是&#xff0c;在感知系统中&#xff0c;我们的目标是科学的——通过重现人类…

日志打印传值 传引用 右值引用性能测试(Linux/QNX)

结论 Linux平台和qnx平台优化后传值性能都是比传引用的差&#xff0c;也比传右值的差&#xff0c;因此传参时有必要传递引用。 测试代码 #include <cstdint> #include <ctime> #include <string>#ifdef __linux__#define ITERATIONS 10000000 #else#defin…

树莓派4b测量光照强度

1.BH1750光照强度连接图 2. BH1750工作原理 BH1750的通讯过程 第1步:发送上电命令。 发送的过程和第2步基本一致,把测量命令(0x10)改成上电命令(0x01)。第2步:发送测量命令。 下面图片上的例子,ADDR引脚是接GND的,发送的测量命令是“连续高分辨率测量(0x10)”。 发送数据…

数据仓库与数据挖掘实验练习3-4(实验二2024.5.8)

练习3 1.简单文件操作练习 import pandas as pd # 读取文件 pd.read_csv(pokemon.csv) # 读取 CSV 文件的函数调用&#xff0c;它将文件中的数据加载到 DataFrame 中&#xff0c;并指定了 Pokemon 列作为索引列。 pd.read_csv(pokemon.csv,index_colPokemon)#查看类型 type(p…

Codeforces Round 943 (Div. 3) A~G1

A.Maximize?&#xff08;枚举&#xff09; 题意&#xff1a; 给你一个整数 x x x。你的任务是找出任意一个整数 y y y ( 1 ≤ y < x ) (1\le y\lt x) (1≤y<x)&#xff0c;使得 gcd ⁡ ( x , y ) y \gcd(x,y)y gcd(x,y)y为最大可能数。 ( 1 ≤ y < x ) (1\le y\lt…

Hbuilderx3.2.16打包报错记录困扰自己工作半个月的问题

大家好我是没钱的君子下流坯&#xff0c;用自己的话解释自己的知识 前言 使用Hbuilderx进行打包的时候&#xff0c;因为公司项目上线的时候考虑了各方面的稳定性选择了3.2.16版本&#xff0c;然后我入职后使用这个版本去打包h5去发布新版本的时候一直报错&#xff0c;半个月没…

MT3031 AK IOI

思路&#xff1a;把每个节点存到堆&#xff08;大根堆&#xff09;里。 如果节点放入后总时间没有超过m则放入堆中&#xff1b;如果总时间超过了&#xff0c;就看堆头元素是否比新元素大。如果大&#xff0c;则删除堆头&#xff08;反悔贪心&#xff09;。 注意别忘记开long l…

微信在线投票送礼物票选小程序源码系统 带完整的安装代码包以及安装搭建教程

在数字化时代&#xff0c;互动与参与成为吸引用户的关键。为了满足广大用户对于在线投票和礼物赠送的需求&#xff0c;我们特别推出了这款微信在线投票送礼物票选小程序源码系统。该系统不仅提供完整的安装代码包&#xff0c;还附带详细的安装搭建教程&#xff0c;让用户轻松搭…