【小知识】Android APP性能测试指标之CPU

2,591 阅读4分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

本文已参与 「掘力星计划」 ,赢取创作大礼包,挑战创作激励金。

前言

我们在Android APP性能测试指标之内存中已经对APP性能指标中的内存进行学习了,内存中经常出现内存泄漏、内存溢出等概念有了一定的了解。

内存是指运行内存(RAM),不是设备存储(ROM)。尽管我们设备的配置在不断的提升,但存仍然是一个紧俏的资源。

安卓是一个多任务系统,为了保证多个应用进程能稳定地同时跑,安卓对每一个应用进程可用的dalvik堆内存做了限制。

也就是说正常情况下,你的app不能无限制地使用内存,当超过一个限度的时候,会导致OOM。 那么这个内存限制到底有多大,其实不是固定的。

具体由厂商决定,APP无法控制,最早是16M。和设备的内存容量,设备屏幕尺寸大小有关(设备屏幕越大,显示更高分辨率图片的时候,就会使用更多的内存)

所以说,移动设备的内存资源是是僧多粥少,寸土寸金的。

同样在设备资源中还有与内存一个样同样关注一个设备资源CPU,因此本期我们将继续学习性能测试中CPU指标。

1. CPU 概述

什么是CPU?

CPU 英文全称Central Processing Unit,是全称中央处理器,它作为计算机系统的运算和控制核心,是信息处理、程序运行的最终执行单元。

CPU 是计算机的运算和控制核心,设备中执行的所有动作都是通过它来控制的,相当于我们身体上的大脑中枢。

为什么关注CPU管理?

  • CPU是针对进程占用时间的比例限制
  • 当执行多任务系统时,有限的cpu要合理分配
  • CPU管理不好,会影响程序执行效率,操作卡顿、响应迟缓,甚至死机

重点说明:

  • 多核不一定能让设备速度变快,但一定能提高设备整体的性能 多核带来的性能提升并不是简单CPU核心的倍数,因为受到多个核之间共享资源的拖累,比如双核性能只是单核的1.4~1.8倍;

2. CPU 架构

在嵌入式系统中,有很多CPU架构,如: ARM、MIPS、Coldfire/68k、PowerPC、X86、PIC、Intel 8051、Atmel AVR、Renesas H8、SH、V850、M32R、DMCU

不同CPU支持的指令集不一样,故对项目的实际影响:

  • 换了CPU的架构,整个项目所有系统模块以及对系统有依赖的应用都得重新测试;

  • SO库:带SO库的应用需要针对每个CPU架构实现对应的SO库,无法通用;

CPU是如何影响系统运行?

  1. 影响代码执行效率,负载过高,形成性能瓶颈
  2. 造成系统卡顿、执行操作响应缓慢,造成ANR甚至系统死机

我们在设备中播放视频时候,操作鼠标,视频的播放画面会出现如下马赛克

🌟进程优先级与CPU关系:进程优先级越高,被CPU执行的机会越大

3. CPU 指标参数

  • 用户时间(User time )

    • 表示CPU在用户进程上的时间百分比,用户时间值高是一个较好的状态,在这种情况下,系统在执行真正的任务;
  • 系统时间(System time)

    • 表示CPU花在内核操作上的时间百分比,持续的高系统时间可以指出网络和驱动栈的瓶颈。
    • 系统应该花较少时间在内核时间上越好;
  • 等待时间(Waiting)

    • CPU花在等待IO操作上的时间总合
    • 系统不应把大量时间花在等待IO操作上,否则你应该调查IO子系统的性能
  • 空闲时间(Idle time)

    • 表示系统处于空间等待任务的时间比;

4. CPU 高负载场景

  • 应用对动画、图形的渲染及处理;
  • 应用多开线程长轮询;
  • 蓝牙搜索附近设备功能; …… 等等应用高负载的代码执行场景;

5. CPU 数据获取方法

  • 查看 CPU 温度
adb shell cat "/sys/class/thermal/thermal_zone7/temp"
  • 查看类型是否是 CPU
adb shell cat "/sys/class/thermal/thermal_zone7/type"
  • 显示占用CPU最大的10个应用
adb shell top -m 10
  • 查看CPU信息
adb shell dumpsys cpuinfo

总结

本期,我们对性能测试APP测试指标重要的CPU指标的浅析,在实际工作中有许多工具可以之间为我们提供可视化的数据展示,比较流行的是腾讯的perfdog、还有行业里常用的Jmeter、Loadrunner等

以上是本期内容,欢迎大佬们点赞评论,下期见~