Perfetto 是一个开源的性能分析工具,旨在帮助开发者了解复杂系统的行为并排查性能和功能问题。它提供高效、低开销的系统和应用层追踪功能,可以记录系统运行时的详细信息,并进行后续的离线分析。
对于 Perfetto 新手,这份入门指南将帮助你快速理解 Perfetto 的基本概念和使用步骤。
1、什么是 Perfetto?
Perfetto 是一个性能分析框架,包括以下几个关键部分:
- 高性能 tracing 守护进程:用于从同一台机器上的多个进程捕获追踪信息,合并成统一的 trace 文件,供离线分析;
- 低开销用户态 tracing SDK:用于在应用程序中直接记录执行时间和状态变化,适合 C/C++ 等编程语言;
- 系统级 OS probes:捕获 Android 和 Linux 系统层面的信息,例如线程调度、CPU 频率、内存使用等;
- 浏览器可视化 UI:用于查看和分析 trace 数据,提供基于时间线的直观展示;
- SQL 分析库:用于编程化地分析 trace 数据,支持复杂的 SQL 查询;
Perfetto 主要用于捕获性能瓶颈、系统行为和应用程序执行过程中的重要事件,帮助开发者进行性能调优和故障排查。
2、安装 Perfetto
2.1、安装 Perfetto 工具
Perfetto 是一个跨平台的工具,支持 Android、Linux 和 Chrome 等平台。可以选择以下方式安装 Perfetto:
-
Android Studio:对于 Android 开发者,Perfetto 可以通过 Android Studio 的 Profiler 进行集成;
-
从源码构建:也可以从 Perfetto 的 GitHub 仓库下载并编译源码;
-
通过 AOSP (Android Open Source Project) :如果用的是 Android 设备,可以通过 AOSP 的 Perfetto 服务进行集成;
2.2、安装 Perfetto UI
Perfetto 的 UI 是完全本地的、基于浏览器的工具。只需要打开浏览器并加载 trace 文件,无需安装额外的工具。可以访问以下链接:
3、创建并记录 Perfetto Trace
3.1、启动 Trace 记录
Perfetto 支持多种方法来启动 trace 记录。常用的方式是使用命令行工具trace或者通过SDK 直接在应用程序中插入 tracing 代码。
使用命令行工具录制 trace:
# 启动 Perfetto 记录一个简单的 trace perfetto --trace-config=config_file --output=trace_file
config_file是配置文件,指定了你想记录的追踪数据类型(如线程调度、CPU 事件等)。trace_file 是保存的输出文件。
3.2 、设置 Trace 配置
Perfetto 通过配置文件来定义要记录的数据。配置文件包含了跟踪项(如线程、CPU、内存)和其他设置。可以根据需要灵活配置,选择特定的事件进行跟踪。
css
duration_ms: 10000
buffers {
size_kb: 65536
fill_policy: RING_BUFFER
}
data_sources {
config {
name: "linux.ftrace"
target_buffer: 0
ftrace_config {
ftrace_events: "sched_switch"
ftrace_events: "sched_wakeup"
}
}
}

4 、分析和可视化 Trace 数据
4.1 、使用 Perfetto UI 查看 Trace 数据
Perfetto 提供了一个基于浏览器的界面,用于可视化 trace 文件中的数据。打开浏览器并加载 trace 文件,可以看到系统的时间轴、事件流和调用图。
步骤:
- 打开 Perfetto UI:Perfetto UI
- 上传或加载录制的 trace 文件。
- 查看时间线、事件、调用栈等信息。
Perfetto UI 可以:
- 直观地查看系统的事件流。
- 放大、缩小时间轴,查看详细的每个事件。
- 根据不同的维度(线程、CPU、事件等)对数据进行过滤。

4.2 、使用 SQL 分析 Trace 数据
Perfetto 还提供了强大的 SQL 分析库(Trace Processor),可以通过 SQL 查询对 trace 数据进行深度分析。
示例 SQL 查询:
-- 获取所有线程的活动时间 SELECT utid, SUM(dur) FROM slice GROUP BY utid;
如何使用 Trace Processor:
-
在命令行中启动
trace_processor:trace_processor trace_file -
进入查询模式,开始执行 SQL 查询,分析 trace 数据。
什么是PerfettoSQL可以参考 Android perfetto - PerfettoSQL是什么?
5 、常见使用场景
Perfetto 可以用于以下场景:
- 性能瓶颈排查:定位 CPU 消耗高、内存泄漏、I/O 阻塞等问题。
- 卡顿(Jank)分析:通过 trace 数据分析应用卡顿的根本原因(线程阻塞、GC、UI 线程问题等)。
- 多线程分析:分析线程调度、竞争条件、线程锁等多线程性能问题。
- 系统级分析:通过操作系统级别的探针,获取调度信息、内存使用情况等。
6 、学习资源
- Perfetto 文档 :Perfetto 官方文档
- Perfetto GitHub 仓库 :Perfetto GitHub
- Perfetto UI :Perfetto UI
- 教程与示例:可以参考 Perfetto GitHub 上的示例,学习如何在不同平台和语言中使用 Perfetto 进行追踪。
7 、总结
Perfetto 是一个强大的性能分析工具,它通过高效的 tracing 功能帮助开发者深入理解应用和系统的行为,解决复杂的性能问题。通过掌握 Perfetto 的使用方法,我们可以高效地记录、分析和优化应用程序的性能。