Android Performance

Android Perfetto 系列 4:使用命令行在本地打开超大 Trace

Word count: 1.9kReading time: 7 min
2025/02/08
loading

本篇是 Perfetto 系列文章的第四篇,如何使用 trace_processor_shell 在本地打开超过 2G 的大文件。在实际的问题分析过程中,我们经常会碰到非常大的 Trace 文件(大于 2GB),直接扔进 ui.perfetto.dev 是没法打开的,这是因为浏览器内存的限制。这时候我们就需要使用官方提供的 trace_processor_shell 工具来本地打开大文件。

随着 Google 宣布 Systrace 工具停更,推出 Perfetto 工具,Perfetto 在我的日常工作中已经基本能取代 Systrace 工具。同时 Oppo、Vivo 等大厂也已经把 Systrace 切换成了 Perfetto,许多新接触 Android 性能优化的小伙伴对于 Perfetto 那眼花缭乱的界面和复杂的功能感觉头疼,希望我能把之前的那些 Systrace 文章使用 Perfetto 来呈现。

Paul Graham 说:要么给大部分人提供有点想要的东西,要么给小部分人提供非常想要的东西。Perfetto 其实就是小部分人非常想要的东西,那就开始写吧,欢迎大家多多交流和沟通,发现错误和描述不准确的地方请及时告知我,我会及时修改,以免误人子弟。

本系列旨在通过 Perfetto 这个工具,从一个新的视角审视 Android 系统的整体运作方式。此外,它还旨在提供一个不同的角度来学习 App 、 Framework、Linux 等关键模块。尽管你可能已经阅读过许多关于 Android Framework、App 、性能优化的文章,但或许因为难以记住代码或不明白其运行流程,你仍感到困惑。通过 Perfetto 这个图形化工具,你可能会获得更深入的理解。

Perfetto 系列目录

  1. Android Perfetto 系列目录
  2. Android Perfetto 系列 1:Perfetto 工具简介
  3. Android Perfetto 系列 2:Perfetto Trace 抓取
  4. Android Perfetto 系列 3:熟悉 Perfetto View
  5. Android Perfetto 系列 4:使用命令行在本地打开超大 Trace
  6. 视频(B站) - Android Perfetto 基础和案例分享

如果大家还没看过 Systrace 系列,下面是传送门:

  1. Systrace 系列目录 : 系统介绍了 Perfetto 的前身 Systrace 的使用,并通过 Systrace 来学习和了解 Android 性能优化和 Android 系统运行的基本规则。
  2. 个人博客 :个人博客,主要是 Android 相关的内容,也放了一些生活和工作相关的内容。

欢迎大家在 关于我 页面加入微信群或者星球,讨论你的问题、你最想看到的关于 Perfetto 的部分,以及跟各位群友讨论所有 Android 开发相关的内容

0. trace_processor_shell 工具下载

官方下载地址:https://github.com/google/perfetto/releases ,找到最新的 release 版本,选择自己的平台下载即可:

下载之后里面就会有 trace_processor_shell 工具(以 Mac 平台为例)

trace_processor_shell 是 Perfetto 开源项目的核心工具之一,提供高性能的本地 Trace 解析服务。通过 –httpd 参数启动 HTTP 服务器后,它允许:

  • 本地原生加速:绕过浏览器 WASM 的性能限制,直接调用 C++ 实现的解析引擎。基于 Rust/C++ 混合实现的解析引擎,优化了内存布局和并行处理,支持流式解析超大型 trace 文件。
  • 交互式分析:与 Perfetto UI 深度集成,支持动态查询和可视化。
  • 离线调试:无需上传 trace 到云端,保护隐私并支持内网环境。

其他的参数

参数 作用 示例值
--http-port 指定监听端口 --httpd :8080
--preload 预加载常用数据表 --preload sched
--num-threads 设置解析线程数(默认 CPU 核数) --num-threads 8

1. 使用 trace_processor_shell 打开 Trace 大文件

./trace_processor_shell –httpd ../jank-航旅纵横-火车票-上下滑动超级卡顿.perfetto-trace

这时候在网页端打开 https://ui.perfetto.dev ,会有下面的弹框

弹框选项功能详解如下

1. YES, use loaded trace

  • 功能:直接复用当前 Trace Processor 已加载的 trace 文件状态(即命令行中指定的 ../jank-航旅纵横-火车票-上下滑动超级卡顿.perfetto-trace)。
  • 适用场景
    若你已通过 trace_processor_shell --httpd 加载了 trace 文件,且希望 UI 直接使用当前进程的解析状态(包括已执行的 SQL 查询、过滤条件等),选择此选项。
  • 优势
    避免重复解析文件,节省时间和内存。

2. YES, but reset state

  • 功能:强制重置 Trace Processor 状态,重新加载当前 trace 文件(或加载新文件)。
  • 适用场景
    • 需要清除当前 Trace Processor 的所有状态(如临时查询结果、过滤器等),重新开始分析。
    • 想通过同一端口加载另一个 trace 文件(需先停止当前进程或更换端口)。
  • 等效操作
    等同于关闭当前 trace_processor_shell 进程后重新执行命令。

3. NO, Use builtin WASM

  • 功能:完全绕过本地 Trace Processor 服务,改用浏览器内置的 WebAssembly (WASM) 引擎解析 trace 文件。
  • 适用场景
    • 本地 Trace Processor 服务不可用或存在兼容性问题。
    • 需要支持分享链接、下载修改后的 trace 文件等 WASM 模式专属功能。
  • 代价
    大文件(如 >100MB)解析速度显著下降,且可能因浏览器内存限制崩溃。

如果选择 YES, use loaded trace , 打开 Trace 后,下面这几个功能是不可用的

2. 命令行启动 vs 直接打开 UI 的区别

通过命令行启动 (trace_processor_shell --httpd)

  • 核心机制
    本地启动一个高性能的 C++ Trace Processor 服务(监听 127.0.0.1:9001),提供原生加速的 trace 解析能力。
  • 优势
    • 性能:原生代码解析速度远超 WASM,尤其适合大型 trace 文件(如 >100MB)。
    • 功能扩展性:支持 SQL 查询、自定义指标计算等高级功能。
    • 状态保持:Trace Processor 的解析状态(如 SQL 临时表)可跨页面会话保留。
  • 限制
    • 无法直接通过 UI 分享 trace 文件链接或下载修改后的文件。
    • 同一时间仅允许一个浏览器标签页使用加速服务。

直接打开 UI 网页 (ui.perfetto.dev)

  • 核心机制
    完全依赖浏览器内置的 WebAssembly 引擎解析 trace 文件,无本地服务参与。
  • 优势
    • 便捷性:无需安装或启动本地工具,适合快速查看小型 trace。
    • 功能完整性:支持分享链接、下载修改后的 trace 文件等协作功能。
  • 劣势
    • 性能瓶颈:WASM 解析速度慢,大文件可能导致浏览器卡顿或崩溃。
    • 功能限制:不支持部分高级 SQL 查询和自定义分析功能。

总结建议

  • 优先命令行启动:处理大型 trace 或需要复杂分析时,使用 trace_processor_shell --httpd 提升性能。
  • 临时轻量分析:直接上传到 ui.perfetto.dev 更方便,但需注意文件大小限制。

3. Mac 权限问题

Mac 上直接运行 ./trace_processor_shell –httpd 会报下面的错误

需要在设置-隐私与安全,点击 Allow 才可以继续运行

参考文档

  1. Perfetto Github 库
  2. Perfetto 官方文档

关于我 && 博客

下面是个人的介绍和相关的链接,期望与同行的各位多多交流,三人行,则必有我师!

  1. 博主个人介绍 :里面有个人的微信和微信群链接。
  2. 本博客内容导航 :个人博客内容的一个导航。
  3. 个人整理和搜集的优秀博客文章 - Android 性能优化必知必会 :欢迎大家自荐和推荐 (微信私聊即可)
  4. Android性能优化知识星球 : 欢迎加入,多谢支持~

一个人可以走的更快 , 一群人可以走的更远

微信扫一扫

CATALOG
  1. 1. Perfetto 系列目录
  2. 2. 0. trace_processor_shell 工具下载
  3. 3. 1. 使用 trace_processor_shell 打开 Trace 大文件
    1. 3.0.1. 1. YES, use loaded trace
    2. 3.0.2. 2. YES, but reset state
    3. 3.0.3. 3. NO, Use builtin WASM
  • 4. 2. 命令行启动 vs 直接打开 UI 的区别
    1. 4.1. 通过命令行启动 (trace_processor_shell --httpd)
    2. 4.2. 直接打开 UI 网页 (ui.perfetto.dev)
    3. 4.3. 总结建议
  • 5. 3. Mac 权限问题
  • 6. 参考文档
  • 7. 关于我 && 博客