小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
本文已参与 「掘力星计划」 ,赢取创作大礼包,挑战创作激励金。
前言
我们在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是如何影响系统运行?
- 影响代码执行效率,负载过高,形成性能瓶颈
- 造成系统卡顿、执行操作响应缓慢,造成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等
以上是本期内容,欢迎大佬们点赞评论,下期见~