惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
Security Latest
Security Latest
博客园_首页
宝玉的分享
宝玉的分享
人人都是产品经理
人人都是产品经理
罗磊的独立博客
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Jina AI
Jina AI
爱范儿
爱范儿
小众软件
小众软件
IT之家
IT之家
Hugging Face - Blog
Hugging Face - Blog
博客园 - 三生石上(FineUI控件)
博客园 - 聂微东
博客园 - Franky
S
SegmentFault 最新的问题
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
大猫的无限游戏
大猫的无限游戏
Apple Machine Learning Research
Apple Machine Learning Research
量子位
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
月光博客
月光博客
NISL@THU
NISL@THU
博客园 - 司徒正美
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
AWS News Blog
AWS News Blog
有赞技术团队
有赞技术团队
V
Visual Studio Blog
雷峰网
雷峰网
C
Cybersecurity and Infrastructure Security Agency CISA
美团技术团队
The Cloudflare Blog
P
Privacy & Cybersecurity Law Blog
Latest news
Latest news
S
Securelist
C
CERT Recently Published Vulnerability Notes
C
CXSECURITY Database RSS Feed - CXSecurity.com
P
Palo Alto Networks Blog
Last Week in AI
Last Week in AI
V
V2EX
Know Your Adversary
Know Your Adversary
酷 壳 – CoolShell
酷 壳 – CoolShell
T
Threat Research - Cisco Blogs
T
Tailwind CSS Blog
J
Java Code Geeks
I
Intezer
Recent Commits to openclaw:main
Recent Commits to openclaw:main
博客园 - 【当耐特】
Schneier on Security
Schneier on Security

Android Performance

SmartPerfetto 架构文章 Q&A:8 个深度技术问答 从 Trace 到洞察:SmartPerfetto AI Agent 的 Harness Engineering 实战 OpenClaw 常见问题解答:Token 消耗、能干什么、本地模型、隐私安全、使用体验 我把 OpenClaw 跑在本地三周后,发现它根本不是聊天机器人 Android Perfetto 系列 10 - Binder 调度与锁竞争 Android Perfetto 系列 9 - CPU 信息解读 Android Perfetto 系列 8:深入理解 Vsync 机制与性能分析 Android Perfetto 系列 7 - MainThread 和 RenderThread 解读 Android Perfetto 系列 6:为什么是 120Hz?高刷新率的优势与挑战 Android Perfetto 系列 5:Android App 基于 Choreographer 的渲染流程 Android ANR 系列 3 :ANR 案例分享 Android ANR 系列 2 :ANR 分析套路和关键 Log 介绍 Android ANR 系列 1 :理解 Android ANR 设计思想 Android Perfetto 系列 3:熟悉 Perfetto View Android Perfetto 系列 2:Perfetto Trace 抓取 Android Perfetto 系列 1:Perfetto 工具简介 Android Perfetto 系列目录 2023 年的方方面面 关于 The Android Performance 知识星球介绍 The Performance Design Of OS OS 设计之性能设计 当 App 有了系统权限,真的可以为所欲为? The Performance 星球茶话会 - 第一期 Systrace 线程 CPU 运行状态分析技巧 - Sleep 和 Uninterruptible Sleep 篇 Systrace 线程 CPU 运行状态分析技巧 - Running 篇 Systrace 线程 CPU 运行状态分析技巧 - Runnable 篇 Android 性能优化的术、道、器 Techniques, Philosophy, and Tools for Android Performance Optimization 回顾 2021 一本讲 Android 流畅性的书,应该有什么内容? Android 系统开发系列(1):Android 12 源代码下载、编译和刷机 Android Systrace 响应速度实战 3 :响应速度延伸知识 Android Systrace 响应速度实战 2 :响应速度实战分析-以启动速度为例 Android Systrace 响应速度实战 1 :了解响应速度原理 Android Systrace 流畅性实战 3 :卡顿分析过程中的一些疑问 Android Systrace 流畅性实战 2 :案例分析 - MIUI 桌面滑动卡顿分析 Android Systrace 流畅性实战 1 :了解卡顿原理 华为手机刷微博体验更好?技术角度的一些分析和思考 一个「闰」字引发的事故 - 三星系统重启分析 Android App 链式唤醒分析 Android Systrace 基础知识 - SurfaceFlinger 解读 Android 开发者学习路线(2020 版本) 我的 2020 年读书单 Android Systrace 基础知识 - CPU Info 解读 Android Systrace 基础知识 - Triple Buffer 解读 Android Systrace 基础知识 - Binder 和锁竞争解读 「置顶」博客文章目录 Android Systrace 基础知识 - Vsync 解读 Android App 启动优化全记录 Android Systrace 基础知识 - MainThread 和 RenderThread 解读 Android Systrace 基础知识 - Input 解读 Android 中的“后台无效动画“行为分析 Android 基于 Choreographer 的渲染机制详解 Android 中的卡顿丢帧原因概述 - 低内存篇 Android 桌面被杀问题分析案例 Android 中的卡顿丢帧原因概述 - 应用篇 Android 中的卡顿丢帧原因概述 - 系统篇 Android 中的卡顿丢帧原因概述 - 方法论 Android 中的 Activity Launch Mode 详解 Android 中的 Hardware Layer 详解 Android Systrace 基础知识 -- 分析 Systrace 预备知识 Android Systrace 基础知识 - SystemServer 解读 Android Systrace 基础知识 -- Systrace 简介 Android Systrace 基础知识 -- Why 60 fps ? Android Systrace -- 系列文章目录 Android 新的流畅体验,90Hz 漫谈 利器 - 高效工具推荐 Android 无障碍服务导致的整机卡顿案例分析 2018 年度好物推荐 - 给辛勤工作的自己一点奖励 Android 系统开发源码环境搭建 陆奇:除了好代码,工程师怎样才算优秀? 程序员的修炼-08-阅读之美 程序员的修炼-07-游戏与编程 程序员的修炼-06-互联网那些事 程序员的修炼-05-了解你的用户 程序员的修炼-04-关于测试的一些思考 程序员的修炼-03-Web 设计原则 程序员的修炼-02-编程之道 程序员的修炼-01-绝地反击之术 Android 系统不释放内存吗? 关于 Android 系统流畅性的一些思考 知乎 救救你的 StartingWindow 「置顶」Android 性能优化必知必会 2017 年度好物推荐 - 给辛勤工作的自己一点奖励 2017 Android Bottom navigation 规范二:样式、行为与规格 Android Bottom Navigation 规范一:使用方法 Android 中如何计算 App 的启动时间? Android 应用启动优化:一种 DelayLoad 的实现和原理(下篇) Android 应用启动优化 - 一种 DelayLoad 的实现和原理(上篇) Android hwui 中 RenderThread 工作流程 Java7 HashMap 源码分析 Android 代码内存优化建议 - OnTrimMemory 优化 Android 代码内存优化建议 - Android 资源篇 Android 代码内存优化建议 - Android 官方篇 Android 代码内存优化建议 - Java 官方篇 Nexus6 with Android M 开启多窗口模式 细说 Java 单例模式 Android 性能优化典范 - Profile GPU Rendering Android 性能优化典范 - Understanding VSYNC
Android Perfetto 系列 4:使用命令行在本地打开超大 Trace
Gracker · 2025-02-08 · via Android Performance

本篇是 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 来呈现。

本文目录

  • Perfetto 系列目录
  • 0. trace_processor_shell 工具下载
  • 1. 使用 trace_processor_shell 打开 Trace 大文件
  • 2. 命令行启动 vs 直接打开 UI 的区别
  • 3. Mac 权限问题
  • 参考文档
  • 关于我 && 博客

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. Android Perfetto 系列 5:Android App 基于 Choreographer 的渲染流程
  7. Android Perfetto 系列 6:为什么是 120Hz?高刷新率的优势与挑战
  8. Android Perfetto 系列 7 - MainThread 和 RenderThread 解读
  9. Android Perfetto 系列 8:深入理解 Vsync 机制与性能分析
  10. Android Perfetto 系列 9 - CPU 信息解读
  11. Android Perfetto 系列 10 - Binder 调度与锁竞争
  12. 视频(B站) - Android Perfetto 基础和案例分享
  13. 视频(B站) - Android Perfetto 分享 - 出图类型分享:AOSP、WebView、Flutter + OEM 系统优化分享

如果大家还没看过 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性能优化知识星球 : 欢迎加入,多谢支持~

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

微信扫一扫