App性能优化——内存、CPU、耗电、启动时间指标获取分析
最近公司要求对App进行性能优化。考虑到既然是优化性能,那首先要获取App的相关性能指标,比如: 内存占用
、CPU利用率
、App启动时间
、App耗电量
等情况,获取以上各指标后,才能针对性分析确定是否存在优化的可能。
- 查看
App启动时间
(冷启动、热启动) - 查看
进程内存
占用 - 查看
进程CPU
使用率 - 查看
App耗电量
一、App启动时间
本小节记录以下三个adb shell 命令:
- adb shell am start -W [包名]
启动APP,查询App的启动时间 - adb shell am start -n [包名]/[包名.Activity]
启动一个Activity(不记录启动时间) - adb shell am force-stop [包名]
关闭一个APP进程
1.1、App启动时间
查询App的启动时间
,可以用以下命令:
// 启动APP,查询App的启动时间
// adb shell am start -W [包名]
adb shell am start -W com.xiaxl.demo
查询结果中,对应的时间参数详细解析如下:
- ThisTime:对应activity启动耗时;
- TotalTime:应用自身启动耗时 = ThisTime + 应用application等资源启动时间
- WaitTime:系统启动应用耗时 = TotalTime + 系统资源启动时间
1.2、启动一个Activity(不记录启动时间)
单纯启动一个Activity,不记录启动时间
,可以使用以下命令。
// 启动一个Activity(不记录启动时间)
// adb shell am start -n [包名]/[包名.Activity]
adb shell am start -n com.xiaxl.demo/com.volley.demo.DmTestActivity
示例图中,对应Activity在AndroidManifest.xml中的声明方式如下:
<activityandroid:name="com.volley.demo.DmTestActivity"android:exported="true"></activity>
1.3、关闭一个App进程
关闭一个App进程
用如下命令。
// 关闭一个APP进程用如下命令。
// adb shell am force-stop [包名]
adb shell am force-stop com.xiaxl.demo
二、进程内存占用
本小节记录以下四个adb shell 命令:
- adb shell dumpsys meminfo [进程名]
Android系统中,查看某一进程的内存占用
情况 - adb shell ps
Android系统中,显示全部系统进程 - adb shell ps | grep [keyword]
Android系统中,筛选包含特定关键词的进程 - adb shell cat /proc/meminfo
Android系统中,查看整个系统的内存详情
2.1、查看进程内存占用
Android系统中,查看某一进程的内存占用情况
可以使用以下命令。
// 查看Android系统中,某一进程的内存占用情况
// adb shell dumpsys meminfo [进程名]
adb shell dumpsys meminfo com.xiaxl.demo
以上截图中 TOTAL
字段,为对应进程占用的系统总内存;其他字段不再做详细介绍。
2.2、显示全部系统进程
Android系统中,若不了解对应进程的进程名称,可用如下命令显示全部系统进程
:
// Android系统中,显示全部系统进程
adb shell ps
2.3、筛选进程
Android系统中,亦可根据特定关键词,筛选包含特定关键词的进程
:
// Android系统中,筛选包含特定关键词的进程
adb shell ps | grep [keyword]
2.4、查看系统内存详情
Android系统中,如果需要查看整个系统的内存详情
,可以使用以下命令。
// Android系统中,查看整个系统的内存详情
adb shell cat /proc/meminfo
相关参数的详细解释如下所示:
MemTotal: 688576 kB 总内存
MemFree: 153736 kB 空闲内存
MemAvailable: 339884 kB 可用内存
Buffers: 16 kB 给文件的缓冲大小
Cached: 267672 kB 高速缓冲存储器
SwapCached: 36 kB 被高速缓冲存储用的交换空间的大小
Active: 222900 kB 活跃使用中的高速缓冲存储器页面文件大小
Inactive: 123700 kB 不经常使用中的告诉缓冲存储器文件大小
Active(anon): 31800 kB 活跃的匿名内存(进程中堆上分配的内存,是用malloc分配的内存)
Inactive(anon): 57272 kB 不活跃的匿名内存
Active(file): 191100 kB 活跃的file内存
Inactive(file): 66428 kB 不活跃的file内存
Unevictable: 0 kB 不能被释放的内存页
Mlocked: 0 kB mlock()系统调用锁定的内存大小
SwapTotal: 2097148 kB 交换空间总大小
SwapFree: 2096884 kB 空闲交换空间
Dirty: 0 kB 等待被写回到磁盘的大小
Writeback: 0 kB 正在被写回的大小
AnonPages: 78876 kB 未映射页的大小
Mapped: 28556 kB 设备和文件映射大小
Shmem: 10160 kB 已经被分配的共享内存大小
Slab: 102916 kB 内核数据结构缓存大小
SReclaimable: 49616 kB 可收回slab的大小
SUnreclaim: 53300 kB 不可回收的slab的大小
KernelStack: 4416 kB kernel消耗的内存
PageTables: 6028 kB 管理内存分页的索引表的大小
NFS_Unstable: 0 kB 不稳定页表的大小
Bounce: 0 kB 在低端内存中分配一个临时buffer作为跳转,把位于高端内存的缓存数据复制到此处消耗的内存
WritebackTmp: 0 kB USE用于临时写回缓冲区的内存
CommitLimit: 2441436 kB 系统实际可分配内存总量
Committed_AS: 308028 kB 当前已分配的内存总量
VmallocTotal: 34359738367 kB 虚拟内存大小
VmallocUsed: 179588 kB 已经被使用的虚拟内存大小
VmallocChunk: 34359310332 kB malloc 可分配的最大的逻辑连续的内存大小
HardwareCorrupted: 0 kB 删除掉的内存页的总大小(当系统检测到内存的硬件故障时)
AnonHugePages: 6144 kB 匿名 HugePages 数量
CmaTotal: 0 kB 总的连续可用内存
CmaFree: 0 kB 空闲的连续内存
HugePages_Total: 0 预留HugePages的总个数
HugePages_Free: 0 池中尚未分配的 HugePages 数量
HugePages_Rsvd: 0 表示池中已经被应用程序分配但尚未使用的 HugePages 数量
HugePages_Surp: 0 这个值得意思是当开始配置了20个大页,现在修改配置为16,那么这个参数就会显示为4,一般不修改配置,这个值都是0
Hugepagesize: 2048 kB 每个大页的大小
DirectMap4k: 108416 kB 映射TLB为4kB的内存数量
DirectMap2M: 940032 kB 映射TLB为2M的内存数量
DirectMap1G: 0 kB 映射TLB为1G的内存数量
三、进程CPU占用
本小节记录以下两个adb shell 命令:
- adb shell dumpsys cpuinfo | grep [进程名]
Android系统中,查看某一进程的CPU占用情况
情况 - adb shell cat /proc/cpuinfo
Android系统中,查看CPU各核心详情
3.1、进程CPU占用
Android系统中,筛选查看某一进程的CPU占用情况
可以使用以下命令。
// 查看Android系统中,筛选某一进程的CPU占用情况
adb shell dumpsys cpuinfo | grep [进程名]// 查看Android系统,CPU占用情况(各进程CPU占用,总的CPU占用)
adb shell dumpsys cpuinfo
adb shell dumpsys cpuinfo | grep [进程名]
命令可以筛选特定进程的CPU占用信息。
adb shell dumpsys cpuinfo
命令可以展示出每一个进程的CPU占用信息,同时打印总的CPU占用信息。
3.2、CPU各核心详情
Android系统中,如果需要查看CPU各个核心的详细信息
,可以使用以下命令。
// Android系统中,查看CPU各个核心的详细信息
adb shell cat /proc/cpuinfo
相关参数的详细解释如下所示:
// CPU 架构, 64bit
Processor : AArch64 Processor rev 14 (aarch64)
// 系统中逻辑处理核的编号,0~7表示8核CPU。
processor : 0
// 在系统内核启动时粗略测算的CPU速度(Million Instructions Per Second)
BogoMIPS : 38.40
Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm lrcpc dcpop asimddp
// ARM 架构
CPU implementer : 0x51
// 8核
CPU architecture: 8
CPU variant : 0xd
CPU part : 0x805
CPU revision : 14// 品牌
Hardware : Qualcomm Technologies, Inc LITO
四、App耗电量
App耗电量相关数据获取 与 分析可以采用以下几种方式:
- 获取App耗电量数据:adb shell dumpsys batterystats
采用该命令,获取对应包名应用
耗电量数据; - 分析App电量消耗:Battery-Historian分析工具
采用该分析工具,可以实现对应包名应用
耗电量分析; - 测试进程电量消耗:perfdog(第三方工具)
https://perfdog.qq.com/article_detail?id=10089&issue_id=0&plat_id=1
4.1、获取App耗电量消耗:dumpsys batterystats
Android系统中,查看对应包名应用
电量消耗数据,可以采用如下方式。
a、重置电量数据(连接数据线操作)
首先要重置电量数据
(重置电量数据,所有App的电量消耗数据将清零);
然后打开全量日志
数据(打开全量电量相关日志记录)。
// 重置电量数据
adb shell dumpsys batterystats --reset
// 打开全量日志记录
adb shell dumpsys batterystats --enable full-wake-history
b、APP相关场景测试(断开数据线)
重置电量数据后,需要拔掉数据线
,进行相关APP场景测试
。
c、导出(重新连接数据线)
重新连接数据线
通过以下命令可在命令行查看对应应用的电量消耗
,亦可将电量消耗信息导出到文件中
。
// 查看 应用电量消耗
adb shell dumpsys batterystats [应用包名] | more
// 导出 应用电量消息,这里使⽤命令more分篇查看电量相关数据
adb shell dumpsys batterystats [应用包名] >1.txt
4.2、分析App电量消耗:Battery-Historian
Battery Historain是谷歌开发的分析工具,其可以用来分析对应包名应用
的耗电情况。
因本小节重点还是如何获取对应包名应用耗电相关数据
,对于Battery Historain的安装与简单使用
可参考我的文章
Mac 中 Battery Historain 安装与使用:
https://xiaxl.blog.csdn.net/article/details/117758299
对应包名应用耗电相关数据
获取步骤如下:
a、重置电量数据(连接数据线操作)
首先要重置电量数据
(重置电量数据,所有App的电量消耗数据将清零);
然后打开全量日志
数据(打开全量电量相关日志记录)。
// 重置电量数据
adb shell dumpsys batterystats --reset
// 打开全量日志记录
adb shell dumpsys batterystats --enable full-wake-history
b、APP相关场景测试(断开数据线)
重置电量数据后,需要拔掉数据线
,进行相关APP场景测试
。
c、导出(重新连接数据线)
重新连接数据线
通过以下命令导出对应应用的电量消耗数据
。
// Android 7.0(包含) 以上设备执行如下命令:
adb bugreport > bugreport.zip
// Android 6.0(包含) 以下设备执行如下命令:
adb bugreport > bugreport.txt
d、battery-historian 工具分析电量消耗
上一步导出的bugreport文件
,上传到battery-historian
工具进行分析。
注:
国内安装Battery Historain
太繁琐,主要是各种依赖包国内都下载不下来。
昨天我安装Battery Historain
一下午没搞定,后来搞到半夜一点钟
终于安装完成(中途曾几度想放弃安装,总之安装太繁琐)。
后来发现,已经有人搭建了一个Battery Historain
线上环境,相关网址为: https://bathist.ef.lc/
将导出的bugreport文件
上传到 https://bathist.ef.lc/ ,便可以开始应用耗电分析了。
4.2、测试进程电量消耗perfdog
PerfDog是腾讯研发的一款性能测试工具,可以测试某一个App对应的某一进程
的CPU
、内存
、电量消耗
,具体操作说明:
https://perfdog.qq.com/article_detail?id=10089&issue_id=0&plat_id=1
因为这里说的是耗电量测试,我这里举例一小时内,我写的一个测试App后台服务进程耗电量情况如下:
// 我的测试Demo后台进程,一小时耗电量如下:
Sum(Battery)[mWh]:1259.2 (1小时电量消耗)
Avg(Power)[mW]:1259.2
Avg(Voltage)[mV]:3737.7 (1小时平均电压)
Avg(Current)[mA]:337.0 (1小时平均电流)
五、参考:
使用 Battery Historian 分析耗电情况:
https://developer.android.google.cn/topic/performance/power/battery-historian?hl=zh-cn
Battery Historian GitHub地址如下:
https://github.com/google/battery-historian?spm=a2c6h.12873639.0.0.10ed5c987lIJt6
Android 调试桥 (adb)
https://developer.android.google.cn/studio/command-line/adb?hl=zh-cn
android developer dumpsys:
https://developer.android.google.cn/studio/command-line/dumpsys?hl=zh-cn
= THE END =
文章首发于公众号”CODING技术小馆“,如果文章对您有帮助,欢迎关注我的公众号。
App性能优化——内存、CPU、耗电、启动时间指标获取分析相关推荐
- App性能优化(布局优化,线程优化,app瘦身优化,页面切换优化,App启动优化,内存优化)
Android APP性能优化(最新总结) 在目前Android开发中,UI布局可以说是每个App使用频率很高的,随着UI越来越多,布局的重复性.复杂度也随之增长,这样使得UI布局的优化,显得至关重要 ...
- Linux性能优化之CPU、内存、IO优化
Linux 的性能进行监测,以下是 VPSee 常用的工具: 工具 简单介绍 top 查看进程活动状态以及一些系统状况 vmstat 查看系统状态.硬件和系统信息等 iostat ...
- Android APP性能优化
转载自:https://www.cnblogs.com/qwangxiao/p/8727229.html Android APP性能优化(最新总结) 导语 安卓大军浩浩荡荡,发展已近十个年头,技术优化 ...
- Android APP性能优化(一)
Android APP性能优化(最新总结) 安卓大军浩浩荡荡,发展已近十个年头,技术优化日异月新,如今Android 8.0 Oreo 都发布了,Android系统性能已经非常流畅了.但是,到了各大厂 ...
- Android性能优化 - 内存优化
性能优化系列阅读 Android性能优化 性能优化 - 消除卡顿 性能优化- 内存优化 性能分析工具 - TraceView Android性能分析工具 为什么内存优化? 在一个商业项目中,很有可能因 ...
- WP7 App性能优化(8):检测应用程序性能(Ⅰ)
有很多方法监视应用程序的性能并检测性能问题.检测内存占用是其中之一.也可以启用重绘区域着色和视图缓存,从而可视化的监视相关资源的使用情况.也可以打开帧频计数器使其在Windows Phone 7模拟器 ...
- 【安卓开发系列 -- APP 】APP 性能优化 -- 崩溃分析
[安卓开发系列 -- APP ]APP 性能优化 -- 崩溃分析 [1]Native Crash 分析示例 [1.1]Linux 编译 breadpad 下载 breadpad 源码 git clon ...
- Android App 性能优化系列结语篇
Android App 性能优化系列结语篇 原文出处:http://gold.xitu.io/post/581f4ad667f3560058a33057 关于Android App的优化, 从第一篇的 ...
- Android App性能优化系列
Android App性能优化系列 关于Android App的优化,从第一篇的计划开始,到内存优化的系列文结束,不知不觉近三个月的时间,写了十五六篇相关的博文,算是对自己的知识的一个系统化,也希望能 ...
最新文章
- 【CyberSecurityLearning 68】python 编写exp
- 单元测试,只是测试吗?
- 职场老油条靠它升职后:还用Excel手动做报表?想想就可笑
- 恐怖地狱火恶魔叉404模板下载
- linux系统优化配置
- JavaScript的Date类的函数特殊处理导致的问题
- 自minibox-b配置说明
- c4d导出html,C4D动力学如何导出fbx或者其他格式?
- Python 第六节课
- Ubuntu16.04下网易云音乐点击图标打不开——已解决
- 开发一个app需要多少钱?
- 最新系统[防黑屏版]BT及双网盘下载(ZZ)
- CVPR2017 | G-RMI_Google大佬构建的姿态估计baseline
- 银行业务中的清算和结算分别是什么样的过程
- 压缩pdf大小的方法分享
- ubuntu-CPU频率调节
- rand()随机函数
- 2021年安全员-A证复审考试及安全员-A证考试试题
- 入门级用Python + tkinter的打飞机/飞机大战小游戏
- 高价地块接连入市 房企抄底推热一线城市土地市场
热门文章
- 春秋云镜wp day1
- 个位数不含4用计算机表示,计算机三级PC技术章节习题
- 《FITNETS: HINTS FOR THIN DEEP NETS》论文整理
- 上海交通大学硕士生招生院系联系方式
- 美国企业劳动成本飙升近10% 现货黄金测试1790美元关口
- android一些有用的方法,代码,和错误处理总结(持续更新)
- 逆向集录_00_不同程序OEP特征总结
- 【实用工具】快上车,程序狗好用的奇淫技巧
- 蓝桥杯-最大最小公倍数java语言
- 玩游戏的时候计算机弹出,游戏运行时出现延迟怎么办?一个设置即可解决