在 Android 开发和调试过程中,监控设备的性能数据至关重要。CPU 使用率是一个关键的性能指标,它能够帮助开发者识别应用的性能瓶颈和优化机会。本文将详细介绍如何使用 Android Debug Bridge (ADB) 查看设备的 CPU 使用率,并解释终端上各个参数的含义。

一、查看整体 CPU 使用率


1. 使用 top 命令

要查看设备的整体 CPU 使用率,可以使用 top 命令。该命令将显示当前所有进程的 CPU 使用情况,包括每个进程的 CPU 使用率、内存使用量和运行时间等。

adb shell top

top 命令输出的常见字段及其含义如下:

PID   USER      PR  NI VIRT  RES  SHR S [%CPU] %MEM     TIME+ ARGS
  • PID: 进程 ID
  • USER: 进程所属用户
  • PR: 进程优先级
  • NI: 进程调度优先级(Nice 值)
  • VIRT: 虚拟内存使用量
  • RES: 常驻内存使用量(物理内存)
  • SHR: 共享内存使用量
  • S: 进程状态(R=运行中,S=睡眠中,D=不可中断的睡眠中,Z=僵尸进程等)
  • %CPU: CPU 使用率
  • %MEM: 内存使用率
  • TIME+: 进程运行总时间
  • ARGS: 进程的启动命令和参数

2. 使用 dumpsys cpuinfo 命令

dumpsys 是一个强大的工具,可以输出系统服务的详细信息。要查看 CPU 使用情况的话,可以使用以下命令:

adb shell dumpsys cpuinfo

该命令会输出每个进程的 CPU 使用情况汇总信息。输出示例如下:

Load: 1.76 / 1.88 / 1.98
CPU usage from 322041ms to 22000ms ago (2024-06-26 15:08:43.625 to 2024-06-26 15:13:43.666):
  34% 6348/com.xxx.xxx: 31% user + 3.3% kernel / faults: 4757 minor
  1.6% 408/irq/76-dwc3: 0% user + 1.6% kernel
  0.9% 386/media.codec: 0.4% user + 0.4% kernel / faults: 32 minor
  0.8% 632/com.android.systemui: 0.6% user + 0.1% kernel / faults: 1699 minor 1 major
  0.7% 179/surfaceflinger: 0.4% user + 0.3% kernel / faults: 488 minor
  ...
  • Load: 系统负载
  • CPU usage from Xms to Yms ago: 最近一段时间的 CPU 使用情况
  • 34% 6348/com.xxx.xxx: 进程 com.xxx.xxx 使用了 34% 的 CPU
  • 31% user + 3.3% kernel: 31% 的 CPU 使用在用户空间,3.3% 在内核空间

我们经常看到在运行top命令的时候,多个进程的CPU使用率累加明显超过100%,如下图所示:
在这里插入图片描述
这表示在多核处理器上,第一个进程大约占用了一个核心的 66.6% 的 CPU 时间,第二个进程占用了另一个核心的 44.3% 的 CPU 时间。如果系统是六核处理器,那么这两个进程的总 CPU 使用率可能就会超过100%。

这种情况下,系统会把各个核心上的 CPU 使用率相加以计算出总的 CPU 使用率。因此,总体上看,CPU 使用率超过100%并不奇怪,因为它反映了多核处理器上各个核心同时工作的情况。

二、查看特定应用的 CPU 使用率


有时可能需要查看特定应用的 CPU 使用率。可以结合 findstr 命令来过滤特定的包名或进程 ID。

1. 获取特定应用的进程 ID (PID)

adb shell pidof com.xxx.xxx

com.xxx.xxx 替换为你要查看的应用包名。

2. 使用 top 命令并过滤该 PID

adb shell top -n 1 | findstr <PID>

<PID> 替换为上一步中获取的进程 ID。

3. 使用 dumpsys cpuinfo 命令并过滤包名

adb shell dumpsys cpuinfo | findstr com.xxx.xxx

com.xxx.xxx 替换为你要查看的应用包名。

三、解释常见的 CPU 相关命令参数


1. adb shell top 参数

  • -n <value>: 刷新次数。例如:-n 1 表示只刷新一次。
  • -d <value>: 刷新间隔时间(秒)。例如:-d 2 表示每 2 秒刷新一次。
  • -s <field>: 按指定字段排序。例如:-s cpu 按 CPU 使用率排序。
  • -m <value>: 显示前 N 个进程。例如:-m 10 显示前 10 个进程。

2. adb shell dumpsys cpuinfo 参数

dumpsys cpuinfo 通常不需要额外参数,因为它默认输出的是汇总信息。

四、最后


希望这篇文章对你在 Android 开发过程中监控 CPU 使用率有所帮助。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐