Android 系统使用 Perfetto 抓取 trace 教程

转自:Android 系统使用 Perfetto 抓取 trace 教程 - 知乎

1. 简介

Perfetto 支持在 Android 设备上抓取 trace 数据以供分析。

2. trace 抓取

在我们开始使用 Perfetto 之前,有个配置要注意下,Perfetto 是基于 Android 的系统追踪服务, 这个配置在 Android11(R) 之后是默认打开的,但是如果你是 Android 9 (P) 或者 10 (Q) ,那么就需要手动设置一下相应的 prop 属性。

# Needed only on Android 9 (P) and 10 (Q) on non-Pixel phones.
adb shell setprop persist.traced.enable 1

在设置完 trace 服务可用后,下面我们就可以开始抓取相应的 trace 了。目前,主要有两个方式可以实现 trace 抓取。一个是通过命令行抓取,一个是通过 Perfetto UI 在线抓取。

2.1 命令行抓取

命令行抓取 trace 方式的前提是你的电脑是已经安装了 adb 驱动,电脑能够通过 adb 命令成功连接到你的 Android 设备,如果没有的话,可以去官网 下载相关驱动安装。

使用命令行抓取又可以分为两种方式:

  • 使用 Android 设备预置的 perfetto 执行程序
  • 使用谷歌推荐的 record_android_trace 脚本

2.1.1 /system/bin/perfetto 抓取

首先,我们可以通过 adb 命令看下这个可执行程序是否真的存在于我们的 Android 设备中,如果这个程序都没有,那我们后面的操作也是无法进行的。

这里我用华为P20手机操作了一下,可以看到手机里已经有这个服务的了,那我们就可以接下来的操作了,执行如下命令:

adb shell perfetto -o /data/misc/perfetto-traces/trace_file.perfetto-trace -t 20s sched freq idle am wm gfx view binder_driver hal dalvik camera input res memory

这个命令先简单的解释下:

-o /data/misc/perfetto-traces/trace_file.perfetto-trace
# -o 表示抓取文件的输出目录,这里我们是输出到 /data/misc/perfetto-traces/ 目录下的 trace_file.perfetto-trace 文件。
-t 20s 
# -t 表示抓取的时间,这里设置了 20s,默认情况下是 10s。
sched freq idle am wm gfx view binder_driver hal dalvik camera input res memory
# 这里表示我们想要抓 trace 的相关模块。

执行上述 adb 命令即可开始抓取所配置的 trace 文件,如下图所示:

这里需要注意下,如果通过 adb shell perfetto 的方式抓取 trace 是需要我们手动执行 ctrl + c 的方式结束我们的抓取操作。抓取的文件被保存在了 /data/misc/perfetto-traces/trace_file.perfetto-trace 中,我们通过 adb pull 的方式把这个文件拉到在电脑里。

trace 文件抓取成功后,接下来要做的就是怎么使用这个抓到的产物。如果还有印象的话,上一篇文章我们已经讲过 Pefetto 已经为我们提供了一个可视化的网站(https://ui.perfetto.dev/),专门来解析我们所抓取的 trace 文件。

打开 https://ui.perfetto.dev/ 后,我们直接把已经抓到的 trace_file.perfetto-trace 文件拖进去即可,就会展示如下的解析之后的结果:

到这里,使用 adb shell perfetto 命令抓取 trace 文件并在网页展示的最基础的方法我们已经学会了。但可能有人会有疑问,你的抓取命令后面跟了那么长的一大串具体是什么东东,而且看着异常别扭显得很繁杂,有没有更精简的方法?答案是:有!

Perfetto 为我们提供了一种更方便更加灵活的配置化式的 trace 抓取方案: trace config 。让我们先来看一下官方提供的 config 样例 config.pbtx:

duration_ms: 10000

buffers: {
    size_kb: 8960
    fill_policy: DISCARD
}
buffers: {
    size_kb: 1280
    fill_policy: DISCARD
}
data_sources: {
    config {
        name: "linux.ftrace"
        ftrace_config {
            ftrace_events: "sched/sched_switch"
            ftrace_events: "power/suspend_resume"
            ftrace_events: "sched/sched_process_exit"
            ftrace_events: "sched/sched_process_free"
            ftrace_events: "task/task_newtask"
            ftrace_events: "task/task_rename"
            ftrace_events: "ftrace/print"
            atrace_categories: "gfx"
            atrace_categories: "view"
            atrace_categories: "webview"
            atrace_categories: "camera"
            atrace_categories: "dalvik"
            atrace_categories: "power"
        }
    }
}
data_sources: {
    config {
        name: "linux.process_stats"
        target_buffer: 1
        process_stats_config {
            scan_all_processes_on_start: true
        }
    }
}

注意,这是一个以 .pbtx 为后缀名的文件,使用时,我们需要先将这个文件 push 到手机目录下,而后执行如下抓取命令:

adb push config.pbtx /data/local/tmp/config.pbtx
adb shell 'cat /data/local/tmp/config.pbtx | perfetto --txt -c - -o /data/misc/perfetto-traces/trace.perfetto-trace'

可以看到,我们通过这种的方式也是抓取成功的,通过 config 的方式我们可以自定义抓取规则,更大的契合了各种业务的需要。

2.1.2 record_android_trace 抓取

除了 adb shell perfetto 的方式,Perfetto 还帮我们提供了一个保姆式服务的抓取脚本 record_android_trace ,它其实跟 adb shell perfetto 是同样的效果,但是它帮我们实现了傻瓜式操作,只要执行下脚本命令,后续文件抓好后会自动导入网页解析展示出来,我们直接开始分析就行,这也是 Perfetto 推荐的抓取方法。

record_android_trace 获取方式:

curl -O https://raw.githubusercontent.com/google/perfetto/master/tools/record_android_trace

搭配上面讲到的 config 方式,执行如下命令即课可开启抓取:

python record_android_trace.py -c config.pbtx -o trace_file.perfetto-trace

执行完上述命令后,脚本会自动帮我们把抓到的文件导入浏览器,并可视化展现,非常方便。

2.2 Perfetto UI 抓取

除了上面的命令行抓取方式外,Perfetto 还提供了一种网页抓取的方式 Perfetto UI。

Perfett UI:https://ui.perfetto.dev/#!/record

通过网页的方式抓取要保证电脑连接你的 Android 设备后,网页端也要识别到设备的存在。然后点击右侧的 Record new trace 即可开始抓取。如果我们需要配置抓取的规则,可以通过下面的配置页面进行设置,比如抓取时长,buffer 大小等。

3. 总结

通过前面的学习,我们现在已经掌握了最简单的使用 Perfetto 抓取 trace 的三种方法:

  • adb shell perfetto
  • record_android_trace
  • Perfetto UI

然而这才只是开始,后面我们会更加深入的学习 trace 的抓取和分析,纸上得来终觉浅,小伙伴们还是要自己去尝试着操作一下,加深理解。

参考资料:https://perfetto.dev/docs/quick

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要查看perfetto-trace,您需要执行以下步骤: 1. 首先,您需要安装perfetto-trace。您可以从官方网站下载并安装它。 2. 打开终端并输入以下命令: perfetto-trace -o trace.pb 这将启动perfetto-trace并开始记录跟踪数据。跟踪数据将保存在trace.pb文件中。 3. 要停止跟踪,请按Ctrl + C。 4. 要查看跟踪数据,请输入以下命令: perfetto-ui trace.pb 这将启动perfetto-ui并打开trace.pb文件。您可以使用perfetto-ui查看跟踪数据并进行分析。 希望这可以帮助您了解如何查看perfetto-trace。 ### 回答2: perfetto-trace是一个性能分析工具,它能够捕捉系统中的事件流并对其进行记录、分析和展示。具体来说,perfetto-trace能够记录CPU使用率、内存占用量、网络流量、进程和线程信息等数据,以帮助开发者诊断和解决应用程序的性能问题。 要使用perfetto-trace进行性能分析的话,需要经过以下步骤: 1. 安装perfettoperfetto是Google开发的一个开源的系统跟踪工具,我们需要先安装它。perfetto支持多种平台和操作系统,可以在GitHub下载和使用。在Linux系统中,可以使用以下命令安装: ``` bash sudo apt-get update && sudo apt-get install -y perfetto ``` 2. 启用perfetto-tracing服务: 需要首先启用perfetto-tracing服务。在终端中输入以下命令: ``` bash sudo perfetto --init ``` 该命令将会创建一个本地的perfetto-tracing服务,并展示服务的配置信息。 3. 配置perfetto: 在perfetto-trace中,需要指定需要捕捉的事件信息和记录方式。可以使用perfetto-config文件,该文件是一个YAML格式的配置文件,可以通过它指定事件流、抽样率、记录方式等参数。 例如: 在perfetto-config文件中使用以下代码: ```yaml version: 1 passphrase: goodpassword buffer_size_kb: 48000 data_sources: - config: name: cpu tracing_buffers: 200 modes: [sampling] slice_endpoints: [utid] buffer_size_kb: 512 sampling_freq: 1000 cpu_freq_time: true ``` 该配置将会使用1000Hz的抽样率记录CPU的使用情况,并在每个时间片结束时对当前线程的utid进行切片。 4. 运行perfetto-trace: 配置perfetto-trace后,可以使用以下命令开始记录事件: ```bash perfetto trace --config path/to/perfetto-config.yaml ``` 该命令将开始记录事件,并将事件流写入trace文件中,该文件可以在后续分析过程中使用。 5. 分析运行时数据: 记录事件后,可以使用perfetto-web或者perfetto-ui来分析运行时数据。perfetto-web是一个Web应用程序,可以直接运行在浏览器中,对trace文件进行可视化展示和交互式分析。而perfetto-ui是一个桌面应用程序,具有更多功能和选项,通过trace文件进行可视化和分析。 以上就是使用perfetto-trace进行性能分析的步骤。要想对应用程序的性能问题进行深入的追踪和分析,perfetto-trace是一个非常有用的工具。 ### 回答3: perfetto-trace是一款性能分析工具,可以帮助开发者对系统的运行进行更加深入的了解,从而进行优化和改进。那么,如何使用perfetto-trace进行分析呢?下面是详细的步骤: 步骤1:安装perfetto perfetto是一个开源项目,可以从GitHub上下载源代码进行编译安装。具体的安装过程可以参考perfetto的官方文档。 步骤2:创建trace配置文件 perfetto-trace的分析是通过配置文件来实现的。可以使用perfetto的UI工具,也可以手动编写配置文件。配置文件是YAML格式的,具体的语法可以在perfetto的官方文档中找到。 步骤3:运行perfetto-trace 运行perfetto-trace的命令如下: ``` perfetto --txt -c your_config_file.pbtxt ``` 其中,your_config_file.pbtxt是之前编写好的配置文件。 步骤4:分析trace结果 运行perfetto-trace之后,会生成一个trace文件。可以使用perfetto的UI工具或者perfetto-trace命令行工具来分析这个文件。perfetto-trace工具提供了丰富的命令和选项,可以帮助开发者快速定位性能瓶颈和问题。 总之,perfetto-trace是一款非常强大的性能分析工具,使用起来需要一些学习成本。但是,掌握perfetto-trace可以帮助开发者更加深入地了解系统的运行情况,从而可以进行更加精细的优化和改进。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值