APP性能测试:CPU使用率

CPU使用率是性能测试的一项重要指标。CPU使用率过高会使得设备运行程序出现卡顿与发热,甚至出现应用程序Crash,影响用户体验;在排除硬件环境的限制下,应用程序应该尽可能少的占用CPU;

Android CPU占用

CPU使用率原理:
Android系统内核是基于Linux,在Linux系统下CPU利用率分为用户态、系统态、空闲态,分别表示CPU处于用户执行的时间,系统内核执行的时间,和空闲系统进程执行的时间;

平常所说的CPU利用率是指:CPU执行非系统空闲进程的时间/CPU总的执行时间,那么这里所说的时间含义是什么呢?

  • HZ:Linux核心每隔固定周期会发出timer interrupt(时钟中断);HZ是用来定义每一秒有几次时钟中断;例如HZ为1000,就代表每秒有1000次时钟中断;
  • Jiffies:在Linux的内核中,有一个全局变量:Jinffies;Jiffies代表时间;它的单位随硬件平台的不同而不同;Jiffies的单位就是
  • 那么CPU利用率计算公式如下:

CPU使用率 = (用户态Jiffies + 系统态Jiffies)/ 总Jiffies

1.CPU测试方法

adb命令

由于Android是基于Linux内核改造而成的操作系统,自然而然也能使用Linux的一些常用命令。比如top命令查看哪些进程是CPU的主要消耗者;

Top命令使用方法如下:

C:\Users\admin>adb shell top --help
usage: top [-Hbq] [-k FIELD,] [-o FIELD,] [-s SORT] [-n NUMBER] [-m LINES] [-d SECONDS] [-p PID,] [-u USER,]

Show process activity in real time.

-H      Show threads
-k      Fallback sort FIELDS (default -S,-%CPU,-ETIME,-PID)
-o      Show FIELDS (def PID,USER,PR,NI,VIRT,RES,SHR,S,%CPU,%MEM,TIME+,CMDLINE)
-O      Add FIELDS (replacing PR,NI,VIRT,RES,SHR,S from default)
-s      Sort by field number (1-X, default 9)                       # 按哪列排序
-b      Batch mode (no tty)
-d      Delay SECONDS between each cycle (default 3)                # 刷新间隔时间
-m      Maximum number of tasks to show                             # 最多显示多少个进程
-n      Exit after NUMBER iterations                                # 刷新次数
-p      Show these PIDs
-u      Show these USERs
-q      Quiet (no header lines)

Cursor LEFT/RIGHT to change sort, UP/DOWN move list, space to force
update, R to reverse sort, Q to exit.

注意:由于Android 8.0以后的Google的权限限制,再也拿不到进程CPU的实时占有率,只能拿到自己本身进程的Jiffies,而由于拿不到系统整体的Jiffies的情况下,就没办法衡量CPU当前的消耗状况了,也没办法根据当前CPU状态实时做一些策略调整;

输入adb shell top命令可以看到如下所示数据:

iOS CPU使用率

ios系统架构主要由以下四层组成:

  •  UI层:主要由SpringBord、Spotlight等UI交互界面;
  • 应用框架层:主要有哦Cocoa Touch
  • 核心框架层:主要有OpenGL等图形、多媒体组件
  • Darwin:操作系统核心

Darwin 

ios是基于Apple Darwin内核,由kernel、XNU和Runtime组成,Xnu(X is not UNIX)是Darwin的内核,一个混合内核,由Mach微内核和BSD组成。Mach内核是轻量级的平台,只能完成操作系统最基本的职责;如:进程和线程、虚拟内存管理、任务调度、进程通信和消息传递机制;其他的工作,如文件操作和设备访问,都是由BSD层实现;

事实上,Mach并不能识别UNIX中的所有进程,而是采用一种稍微不同的方式,使用了比进程更轻量级的概念:任务(Task);

iOS APP线程

经典的UNIX采用了自上而下的方式,最基本的对象是进程,然后进一步划分为一个或多个线程;Mach则采用了自底而上的方式;最基本的单元是线程,一个或多个线程包含在一个任务中;

因此ios APP作为进程运行时会有多个线程,每个线程对CPU的使用率不同,各个线程对CPU使用率总和,就是当前App对CPU的占有率;

iOS测试利器--Instruments

Instrumentsz是Xcode的一个工具集,为什么提供了强大的程序性能分析及测试能力。使用Instruments你可以做下面这些事:

  • 检查一个或多个应用或进程的行为
  • 检查设备相关的功能,比如Wi-Fi、蓝牙等
  • 在真机或模拟器上进行性能测试
  • 创建你自定义的DTrace来分析系统及应用的各种行为
  • 跟踪源码中的问题
  • 对APP进行性能分析
  • 查找APP中的内存问题,比如内存泄漏(Leaked memory)、废弃内存(Abandoned memory)、僵尸(zombies)等
  • 进行系统级别的问题定位
  • 通过脚本记录一个用户行为序列,从而可以通过运行脚本对你的ios应用进行自动化测试
  • 保存测试配置模板以供复用

Instruments工具集

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值