移动测试开发 性能工具你用对了吗?

opentest-oper@360.cn · April 26, 2023 · 2804 hits

要对客户端应用程序进行性能测试,需要了解用户场景和性能目标,选择合适的工具或方法来衡量和改进性能。其中涉及的性能指标有很多,如 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 环境采用了持续集成,但性能测试通常还是一个手动过程,性能测试的未来在于在应用程序生命周期的所有阶段实现自动化测试,为此,有必要在持续集成的上下文中自动运行测试,尽可能多的将性能测试纳入自动化。

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
No Reply at the moment.
需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up