性能测试之使用 adb 查看设备CPU占用与数据分析

一、如何使用 adb 获取CPU占用

1、运行 top 命令:

bash 复制代码
adb shell top

输出结果:

  • -d <秒>: 设置刷新间隔,如 top -d 1 每秒刷新一次。

  • -m <数量>: 显示最多多少行进程,如 top -m 10显示前10个进程。

  • -s <列名>: 按某列排序,如 top -s cpu按CPU占用率排序(-s r也可以),top -s res按内存占用排序。

2、在 top 交互界面中(运行 top 命令后)

  • 按 q:退出。
  • 按 M:按内存使用率(%MEM)排序。
  • 按 P:按CPU使用率(%CPU)排序。这是最常用的。
  • 按 R:反转排序顺序。

3、快速查看进程的CPU实时占用率

bash 复制代码
adb shell top -n 1|grep<package_name>
复制代码
Windows系统请注意: grep 是一个在 Linux/Unix/macOS 等类 Unix 系统中才存在的文本搜索工具。而 Windows 系统的命令行环境默认没有这个命令。需要现在 CMD 中输入:adb shell 然后,在出现的设备命令行 $ 或 #后,输入:top -n 1 | grep <package_name>"

注:-n 1 代表只刷新一次,避免刷屏。去掉此参数可进行简单实时监控,按 Ctrl+C 退出。

二、数据解析

输出的数据主要包括:

进程标识:PID, USER, ARGS

调度优先级:PR, NI

内存使用:VIRT, RES, SHR, %MEM

CPU 和状态:S, %CPU

运行时间:TIME+

各列详细含义

下面我们逐列进行解释:

  1. PID
    全称: Process ID
    含义: 进程的唯一标识符。操作系统通过这个数字来识别和管理进程。
    解读: 数字越大,通常意味着进程启动得越晚。如果你想监控某个特定的进程(比如一个App),你需要找到它的PID。
  2. USER
    含义: 运行此进程的用户身份。
    解读: 在Android中,你通常会看到 root、system、u0_a123(其中数字代表App的用户ID)等。这可以帮助你判断进程是系统进程、系统服务还是第三方应用。
  3. PR
    全称: Priority
    含义: 进程的实时优先级。这是由Linux内核调度的优先级。
    解读: 数字越小,优先级越高,越容易被调度执行。这个值通常由内核动态调整,普通应用开发者很少直接修改它。
  4. NI
    全称: Nice Value
    含义: 进程的"友好度",是用户空间可以调整的优先级修正值。
    解读: 取值范围通常是 -20 到 19。值越低(负值),优先级越高;值越高(正值),优先级越低,表示进程更"友好",更愿意让出CPU。默认值为0。
  5. VIRT
    全称: Virtual Memory Size
    含义: 进程使用的虚拟内存总量。
    解读: 它包括应用程序代码、数据、共享库以及已经换出到磁盘(Swap)的内存等。这个值通常很大,因为它包含了进程"有权访问"的所有内存,但不一定都在物理内存中。
  6. RES
    全称: Resident Memory Size
    含义: 进程当前使用的、未被换出的物理内存大小(单位通常是KB)。
    解读: 这是衡量一个进程实际占用多少宝贵物理内存的关键指标。RES 是 VIRT 中真正在物理内存中的那一部分。
  7. SHR
    全称: Shared Memory Size
    含义: RES 中可以被其他进程共享的内存大小。
    解读: 主要是共享库(如系统库 .so 文件)占用的内存。多个进程使用同一个库时,这个库在物理内存中只有一份,但会被多个进程共享计算到它们的 SHR 中。
  8. S
    全称: Process Status
    含义: 进程的状态。
    常见状态:
  • R:正在运行或可运行(Running/Runnable)
  • S:睡眠状态(Sleeping),通常在等待某个事件(如I/O操作)
  • D:不可中断的睡眠(Uninterruptible Sleep),通常是在等待I/O,不能被信号唤醒
  • Z:僵尸进程(Zombie),进程已终止,但其父进程尚未回收其资源
  • T:已停止(Stopped),通常是由于作业控制信号(如
    SIGSTOP)
  1. %CPU
    含义: 这是你最关心的列。它表示从上一次刷新到当前时刻,进程占用CPU的百分比。
    解读: 对于一个单核CPU,100%表示这个进程占满了整个核心。对于一个多核CPU(如8核),这个值可以超过100%。例如,如果一个进程在8核设备上占满了2个核心,那么它的 %CPU 就会显示 200%。这是排查CPU性能问题和耗电问题的首要观察指标。
  2. %MEM
    含义: 进程使用的物理内存(RES)占系统总物理内存的百分比。
    解读: 帮助你快速识别内存消耗大户。
  3. TIME+
    含义: 进程自启动以来,总共在CPU中运行的时间。
    解读: +表示显示精度到百分之一秒。格式为 MMM:SS.ss。例如 12:34.56表示12分钟34.56秒。这个值持续快速增长,说明该进程长期在消耗CPU。
  4. ARGS
    全称: Arguments
    含义: 启动该进程的命令行或进程名/包名。
    解读: 在Android中,这通常显示为应用的包(如 com.android.chrome)或系统进程名(如 system_server, com.android.phone)。这是识别进程归属的最直接方式。

三、举例说明

假设你看到一行:

复制代码
12345 u0_a123  20   0 1.2G 150M  80M R  45.6   3.8   1:23.45 com.example.myapp

这表示:

PID 12345,

由用户 u0_a123(一个应用)启动。

优先级(PR/NI)是 20/0,是标准优先级。使用了 1.2GB 虚拟内存,但实际占用了 150MB 物理内存,其中 80MB 是共享库。

进程状态是 R,正在运行。

在过去的一个采样周期内,CPU 占用率高达 45.6%。

它占用了设备总内存的 3.8%。

从启动到现在,它累计在 CPU 上运行了 1分钟23.45秒。

这个进程是包名为 com.example.myapp 的应用。

通过这个分析,你可以快速定位到是哪个应用(com.example.myapp)正在大量消耗CPU资源,从而进行下一步的优化或排查。

四、判断标准与总结

现在我们学会了如何查看应用的CPU占用率,当应用长时间(超过1分钟)维持在80%以上,尤其是用户没有明显操作时,会导致设备发热、卡顿、耗电加快,这通常意味着存在性能问题。

相关推荐
百***68048 小时前
MySQL四种备份表的方式
mysql·adb·oracle
剑动山河20 小时前
ubuntu 升级mysql由mysql5.7.42 升级到8.4.0
mysql·ubuntu·adb
hygge9991 天前
MySQL 全体系深度解析(存储引擎、事务、日志、MVCC、锁、索引、执行计划、复制、调优)
数据库·经验分享·mysql·adb·面试
BullSmall1 天前
MySQL全面安全加固实战指南
mysql·安全·adb
码农阿豪1 天前
离线部署指南:本地下载MySQL 8.0.37并上传服务器Centos7.9安装
服务器·mysql·adb
Hello.Reader1 天前
Flink CDC + StarRocks用 StarRocks Connector 打通实时明细与分析
数据仓库·adb·flink
王景程2 天前
如何搭建IoT机器视觉
adb·android studio·web app·lavarel
程序员卷卷狗2 天前
MySQL 慢查询优化:从定位、分析到索引调优的完整流程
android·mysql·adb