ADB ->adb shell perfetto 抓取 trace 指令

adb shell perfetto 抓取 trace 指令详解:一条命令快速搞懂

前言

Android 性能分析中,Perfetto 是非常常用的系统级 tracing 工具。

很多同学在排查 卡顿、掉帧、启动慢、Binder 调用异常、CPU 调度问题 时,都会用它来抓取 trace

下面这条命令就是一个典型的抓取方式:

bash 复制代码
adb shell "perfetto -o /data/misc/perfetto-traces/edit_export.perfetto-trace -t 10s -b 64mb --app com.example.phototurbodemo sched freq idle am wm gfx view binder_driver hal res dalvik bionic power pm ss database disk mmc"; adb pull /data/misc/perfetto-traces/edit_export.perfetto-trace .

本文就来拆解一下这条命令的含义,帮助你快速看懂并学会自己改。


一、这条命令整体在做什么?

这条命令其实分成两部分:

bash 复制代码
adb shell "perfetto ..."
adb pull /data/misc/perfetto-traces/edit_export.perfetto-trace .

核心作用是:

  1. Android 设备上抓取 10 秒系统 trace
  2. 把生成的 trace 文件拉到电脑当前目录

也就是说,它完成的是一个完整流程:

设备上采集 trace → 保存到手机指定路径 → 拉取到本地分析


二、第一部分:adb shell perfetto 抓取 trace

原始命令如下:

bash 复制代码
adb shell "perfetto -o /data/misc/perfetto-traces/edit_export.perfetto-trace -t 10s -b 64mb --app com.example.phototurbodemo sched freq idle am wm gfx view binder_driver hal res dalvik bionic power pm ss database disk mmc"

下面逐项拆开。


1. adb shell

bash 复制代码
adb shell

表示进入设备 shell 环境执行命令。

也就是告诉电脑:后面的 perfetto 命令不是在本机执行,而是在 Android 手机里执行。


2. perfetto

bash 复制代码
perfetto

这是 Android 平台上的 tracing 工具,用来采集系统和应用运行时的性能数据。

它可以记录很多信息,比如:

  • CPU 调度
  • 频率变化
  • Binder 调用
  • 图形渲染
  • Activity/Window 状态
  • 内存与磁盘相关事件

3. -o:输出文件路径

bash 复制代码
-o /data/misc/perfetto-traces/edit_export.perfetto-trace

表示 trace 输出到设备上的这个文件:

bash 复制代码
/data/misc/perfetto-traces/edit_export.perfetto-trace

这里有两个关键点:

  • /data/misc/perfetto-traces/Perfetto 常用的 trace 存放目录
  • edit_export.perfetto-trace:输出文件名,可以自定义

也就是说,抓取结束后,trace 文件会先保存在手机里,而不是直接到电脑上。


4. -t 10s:抓取时长

bash 复制代码
-t 10s

表示采集时长为 10 秒

常见写法有:

  • -t 5s:抓 5 秒
  • -t 10s:抓 10 秒
  • -t 30s:抓 30 秒

如果你要分析某个具体操作,比如:

  • 点击按钮
  • 页面切换
  • 图片导出
  • 应用启动

通常可以设置成 5~15 秒,够看核心过程即可。


5. -b 64mbbuffer 大小

bash 复制代码
-b 64mb

表示 trace buffer 的大小是 64MB

这个参数决定 Perfetto 采集数据时使用多大的缓冲区。

如果 buffer 太小,在事件很多的时候,可能会出现:

  • 旧数据被覆盖
  • trace 不完整
  • 关键信息丢失

一般来说:

  • 轻量场景:16mb / 32mb
  • 常规场景:64mb
  • 重负载场景:128mb 甚至更大

这条命令设置 64mb,属于比较常见、比较稳妥的配置。


6. --app com.example.phototurbodemo:关注指定应用

bash 复制代码
--app com.example.phototurbodemo

表示此次 trace 重点关联这个应用进程

bash 复制代码
com.example.phototurbodemo

它的作用一般是:

  • app 相关的 trace 信息更明确
  • 便于聚焦某个目标应用
  • 分析该应用主线程、渲染、调度、Binder 等行为

如果你要分析别的应用,改成对应包名即可。

例如:

bash 复制代码
--app com.xxx.yyy

三、后面这一长串是什么?

后面这一串:

bash 复制代码
sched freq idle am wm gfx view binder_driver hal res dalvik bionic power pm ss database disk mmc

可以理解为:

告诉 Perfetto:要抓哪些类别的数据源。

这些都是 trace category(追踪类别)或相关事件类型。

下面简要说明每一项的核心作用。


1. sched

bash 复制代码
sched

抓取 线程调度 信息。

能看到:

  • 线程什么时候运行
  • 被哪个 CPU 执行
  • 什么时候被切走
  • 是否发生抢占

这是分析 卡顿、主线程阻塞、线程竞争 时最核心的数据之一。


2. freq

bash 复制代码
freq

抓取 CPU 频率变化

用于看:

  • CPU 是否升频
  • 性能是否被拉满
  • 调度和频率是否匹配

适合分析性能不足或功耗问题。


3. idle

bash 复制代码
idle

抓取 CPU 空闲状态

可以辅助判断:

  • CPU 是否长期空闲
  • 是否存在 workload 不连续
  • 功耗状态切换情况

4. am

bash 复制代码
am

ActivityManager 相关事件。

主要用于看:

  • Activity/Service 生命周期
  • 进程管理
  • 应用切换相关行为

适合分析启动、页面切换、前后台切换。


5. wm

bash 复制代码
wm

WindowManager 相关事件。

主要用于观察:

  • 窗口切换
  • 窗口层级变化
  • 界面显示流程

6. gfx

bash 复制代码
gfx

抓取 图形渲染 相关信息。

通常用于分析:

  • 掉帧
  • 渲染卡顿
  • 绘制性能问题

7. view

bash 复制代码
view

抓取 View 系统 相关事件。

比如:

  • measure/layout/draw
  • UI 线程的 View 绘制行为

适合排查传统 View 界面的卡顿问题。


8. binder_driver

bash 复制代码
binder_driver

抓取 Binder 驱动层调用

非常适合分析:

  • 进程间通信耗时
  • Binder 调用阻塞
  • system_server 或其他服务交互异常

如果应用依赖系统服务很多,这类数据很有价值。


9. hal

bash 复制代码
hal

抓取 硬件抽象层(HAL) 相关信息。

用于观察系统与底层硬件模块交互情况,比如:

  • 相机
  • 音频
  • 显示
  • 传感器

10. res

bash 复制代码
res

通常和 资源加载/系统资源相关行为 有关。

在具体分析中,更多是辅助信息。


11. dalvik

bash 复制代码
dalvik

抓取 *Android Runtime / Java 虚拟机* 相关事件。

比如:

  • GC
  • 线程状态
  • Java 层运行时活动

如果怀疑 Java/Kotlin 层频繁 GC 或运行时抖动,这类信息很关键。


12. bionic

bash 复制代码
bionic

抓取 *Bionic libc* 相关事件。

更多偏底层运行库行为,适合做更深入的系统问题分析。


13. power

bash 复制代码
power

抓取 电源管理 相关事件。

可以辅助分析:

  • 唤醒行为
  • 功耗状态
  • 电源相关调度影响

14. pm

bash 复制代码
pm

PackageManager / PowerManager 相关部分事件 ,具体视平台实现而定。

一般作为辅助分析项使用。


15. ss

bash 复制代码
ss

通常表示系统服务相关 tracing 类别中的一部分,具体内容可能因 Android 版本和设备厂商而略有差异。

实际使用中,它更多是补充系统服务行为信息。


16. database

bash 复制代码
database

抓取 数据库操作 相关事件。

如果你的应用存在:

  • SQLite 查询慢
  • 主线程读写数据库
  • 数据库锁竞争

这个类别会很有帮助。


17. disk

bash 复制代码
disk

抓取 磁盘 I/O 相关信息。

可以分析:

  • 文件读写耗时
  • I/O 阻塞
  • 导出、解码、加载资源时的磁盘压力

18. mmc

bash 复制代码
mmc

抓取 存储设备(MMC/UFS 等块设备) 相关事件。

更偏底层存储链路分析,适合深挖 I/O 性能问题。


四、第二部分:adb pull 拉取 trace 文件

第二段命令:

bash 复制代码
adb pull /data/misc/perfetto-traces/edit_export.perfetto-trace .

表示把设备上的 trace 文件拉到电脑当前目录。

拆解如下:

1. adb pull

bash 复制代码
adb pull

用于从 Android 设备拷贝文件到本地电脑。

2. 源文件路径

bash 复制代码
/data/misc/perfetto-traces/edit_export.perfetto-trace

就是前面 -o 指定生成的 trace 文件。

3. .

bash 复制代码
.

表示拉到当前命令行所在目录

所以最终效果是:

手机上的 edit_export.perfetto-trace

被下载到你电脑当前目录下


五、整条命令的执行流程

这条命令完整执行流程可以概括为:

第一步:在设备上抓取 10trace

  • 输出文件:/data/misc/perfetto-traces/edit_export.perfetto-trace
  • 目标应用:com.example.phototurbodemo
  • 采集类别:调度、频率、渲染、Binder、数据库、磁盘等

第二步:把 trace 拉到本地

  • 文件保存到当前目录
  • 后续可用 Perfetto UI 打开分析

六、这条命令适合什么场景?

这条命令属于一个比较综合型的抓取方案,适合:

  • 分析页面卡顿
  • 分析图片编辑/导出耗时
  • 分析应用主线程阻塞
  • 分析 Binder 调用慢
  • 分析磁盘 I/O 或数据库操作影响
  • 分析渲染掉帧

尤其从文件名 edit_export.perfetto-trace 来看,

它很像是在分析 图片编辑导出流程 的性能问题。


七、如果只看核心,最重要的是哪几个参数?

如果你只想快速记住核心,那就记这几个:

bash 复制代码
perfetto -o <输出文件> -t <时长> -b <buffer大小> --app <包名> <trace类别...>

也就是:

  • -o:输出到哪里
  • -t:抓多久
  • -b:buffer 多大
  • --app:抓哪个应用
  • 后面的类别:抓哪些信息

这几个就是整条命令最关键的骨架。


八、一个更易懂的口语化理解

你可以把这条命令理解成一句话:

让手机用 Perfetto 盯着 com.example.phototurbodemo 这个应用,连续记录 10 秒内的线程调度、CPU 频率、渲染、Binder、数据库、磁盘等性能数据,保存成 trace 文件,然后把这个文件下载到电脑上分析。


九、总结

最后做一个简要总结:

这条命令的作用是:

  • Android 设备上抓 10 秒性能 trace
  • 重点关注指定应用 com.example.phototurbodemo
  • 采集调度、渲染、Binder、数据库、磁盘等关键性能信息
  • 抓完后自动拉到本地当前目录

一句话总结:

这是一条用于 应用性能分析 / 卡顿定位 / 导出耗时排查 的综合 Perfetto 抓取命令。


十、附:原命令

bash 复制代码
adb shell "perfetto -o /data/misc/perfetto-traces/edit_export.perfetto-trace -t 10s -b 64mb --app com.example.phototurbodemo sched freq idle am wm gfx view binder_driver hal res dalvik bionic power pm ss database disk mmc"; adb pull /data/misc/perfetto-traces/edit_export.perfetto-trace .
相关推荐
小鸡吃米…1 小时前
Python 网络爬虫 —— 环境设置
开发语言·爬虫·python
add45a2 小时前
C++中的观察者模式
开发语言·c++·算法
该怎么办呢2 小时前
Source/Core/Event.js
开发语言·javascript·ecmascript·cesium
似水明俊德2 小时前
04-C#.Net-委托和事件-面试题
java·开发语言·面试·c#·.net
johnrui2 小时前
集合与树形结构
开发语言·windows
该怎么办呢2 小时前
Source/Core/DeveloperError.js
开发语言·javascript·ecmascript
小璐资源网2 小时前
Java 21 新特性实战:虚拟线程详解
java·开发语言·python
m0_569881472 小时前
基于C++的数据库连接池
开发语言·c++·算法