导读
要对客户端应用程序进行性能测试,需要了解用户场景和性能目标,选择合适的工具或方法来衡量和改进性能。其中涉及的性能指标有很多,如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,里面有各种软件测试+开发资料和技术可以一起交流学习哦。
最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:
这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!