Android CPU性能测试

本文涉及的产品
性能测试 PTS,5000VUM额度
简介: 在经典的性能问题中,一般我们会说两种问题:一种是I/O密集型问题,另外一种就是CPU密集型的问题,今天我就来聊聊如何测试Android应用的 CPU性能。

原理


CPU的问题一般分为以下三类:


1、CPU资源冗余使用:

关于这个问题的原因,可能是算法太烂,明明可以只遍历一次却遍历了两次,主要出现在查找、排序、删除等环节;也可能是没有用缓存,明明解码过一次的图片还重复解码;还有就是明明使用int就足够,偏偏要用long,导致CPU的运算压力多出4倍。


2、CPU资源争抢:

  • 抢主线程的CPU资源;这是最常见的问题,关键是主线程起码在Android 6.0版之前,没有renderthread的时候,其繁忙程度就决定了是否会引发用户的卡顿问题。
  • 抢音视频的CPU资源;跟主线程的情况不同,音视频编解码本身就消耗了大量的CPU资源,同时音视频编解码对于解码的速度是有硬要求的,达不到就会有产生播放流畅度的问题。
  • 大家平等,相互抢,比如你开了20个线程做图片解码,那就是相互抢,最终效果就是导致图片的显示速度非常慢。


3、CPU资源利用率低:

CPU就是速度与负载的博弈,用得多会耗电、会卡顿,用得少也会有问题,像启动、界面切换、音视频编解码这些场景,为了保证其速度,不好好利用CPU,真对不起核心数的不断飙升。而导致无法充分利用CPU的因素,除了磁盘和网络I/O外,还有锁操作、sleep等。其中锁的优化,一般在锁的范围上,主要是尽可能地缩减范围。


方案


下面重点讲一下做CPU性能测试过程中的采集方法:


1、top命令

adb shell top | grep 包名

top命令大家应该是非常熟悉的了,依靠adb shell top就可以简单地列出进程的各种信息,缺点就是top本身的性能消耗就不少,所以我们在自动化测试里面的取值,一般不用top。

2、proc下的CPU信息

cat /proc/[pid]/stat

Google 在Android Monitor工具中收集CPU的方法也是采用这种方式,这种方式的原理跟top相似,但性能损耗要小很多,建议自动化测试采用这种方式,下面是命令返回字段的说明:

image.png

获取应用pid:

adb shell ps | grep 包名 | awk '{print $2}' | sed -n 1p


计算应用进程的总CPU时间:

utime + stime + cutime + cstim
adb shell cat /proc/[pid]/stat | awk '{print $14+$15+$16+$17}'

计算CPU总时间:

微信图片_20220519000400.png

对应的指标分别是:user + nice+ system+ idle+ iowait+ irq+ softirq
一段时间内应用进程CPU使用率:(进程CPU总时间2-进程CPU总时间1) / (CPU总时间2-CPU总时间1) * 100%

3、dumpsys cpuinfo

adb shell dumpsys cpuinfo | grep 包名

这种方式虽然比top更简洁,但是准确性没有top高。

相关实践学习
通过性能测试PTS对云服务器ECS进行规格选择与性能压测
本文为您介绍如何利用性能测试PTS对云服务器ECS进行规格选择与性能压测。
相关文章
|
2月前
|
Java 测试技术 Android开发
Android性能测试——发现和定位内存泄露和卡顿
本文详细介绍了Android应用性能测试中的内存泄漏与卡顿问题及其解决方案。首先,文章描述了使用MAT工具定位内存泄漏的具体步骤,并通过实例展示了如何分析Histogram图表和Dominator Tree。接着,针对卡顿问题,文章探讨了其产生原因,并提供了多种测试方法,包括GPU呈现模式分析、FPS Meter软件测试、绘制圆点计数法及Android Studio自带的GPU监控功能。最后,文章给出了排查卡顿问题的四个方向,帮助开发者优化应用性能。
178 4
Android性能测试——发现和定位内存泄露和卡顿
|
2月前
|
测试技术 Shell Android开发
Android 性能测试初探 (六)
本节聊聊性能测试的最后一项- 流量,当然我所指的性能测试是针对大部分应用而言的,可能还有部分应用会关注网速、弱网之类的测试,但本系列文章都不去一一探讨了。
55 6
|
2月前
|
JavaScript 测试技术 Android开发
Android 性能测试初探 (四)
本文介绍了GPU在移动端性能测试中的重要性,并详细解释了过度绘制、帧率和帧方差的概念。针对GPU测试,文章列举了三项主要测试内容:界面过度绘制、屏幕滑动帧速率和平滑度。其中,过度绘制测试需遵循特定标准,而帧速率和平滑度测试则可通过软件或硬件方法实现。在软件测试中,使用Systrace插件和高速相机是两种常用手段。对于不同机型,帧率及帧方差的测试标准也需相应调整。
55 5
|
2月前
|
测试技术 Shell Android开发
Android 性能测试初探 (三)
本文承接《Android性能测试初探(二)》,深入探讨CPU与内存测试。介绍了移动端内存测试的重要性及其测试目标,并详细列举了不同状态下应用内存消耗情况的测试项目。此外,还提供了多种内存测试方法,包括使用`procrank`等工具的具体操作步骤。最后,文章也简要提及了CPU测试的相关内容,帮助读者更好地理解Android性能测试的关键要素。
53 5
|
2月前
|
测试技术 Shell 定位技术
Android 性能测试初探 (五)
聊聊大家不常关注的测试项- 功耗
53 3
|
2月前
|
算法 测试技术 Android开发
Android 性能测试初探 (二)
上回大体介绍了下在 android 端的性能测试项,现在我们就细节测试项做一些阐述(包括如何自己 DIY 测试)
48 4
|
2月前
|
测试技术 API Android开发
Android 性能测试初探 (一)
Android 性能测试,跟pc性能测试一样分为客户端及服务器,但在客户端上的性能测试分为 2 类: 一类为 rom 版本的性能测试;一类为应用的性能测试。
53 3
|
2月前
|
Android开发
Android学习 —— 测试init.rc中的条件触发的处理顺序
Android学习 —— 测试init.rc中的条件触发的处理顺序
|
3月前
|
Android开发 开发者
Android、Flutter为不同的CPU架构包打包APK(v7a、v8a、x86)
Android、Flutter为不同的CPU架构包打包APK(v7a、v8a、x86)
295 1
|
4月前
|
监控 算法 Java
压测分析Java内存和CPU暂用
7月更文挑战第7天
68 5
下一篇
无影云桌面