ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Perfetto 快速入门教程:3 步录下第一条 trace,用 SQL 定位应用卡顿

Perfetto 快速入门教程:3 步录下第一条 trace,用 SQL 定位应用卡顿 Perfetto 快速入门教程3 步录下第一条 trace用 SQL 定位应用卡顿【免费下载链接】perfettoProduction-grade client-side tracing, profiling, and analysis for complex software systems.项目地址: https://gitcode.com/GitHub_Trending/pe/perfettoPerfetto 是一套开源的性能追踪与 trace 分析工具也是 Android 和 Chrome 的默认系统级 tracing 方案。它把调度、内存、系统调用等事件按统一时间戳收进一个 trace 文件让你用时间轴或 SQL 直接查。应用卡顿却查不到日志原因这套工具就是干这个的。功能速览先花 10 秒判断值不值得投入能力说明系统级 trace 录制在 Android/Linux 上把 CPU 调度、频率、atrace、logcat 等多路事件录进同一个 trace 文件浏览器时间轴 UI纯本地、免安装打开 GB 级 traceCPU 轨道、进程轨道、内存曲线一应俱全PerfettoSQL像查数据库一样查 trace内置进程级 CPU 利用率等现成分析模块trace_processor命令行和 Python APItrace 分析可以脚本化、跑进 CIC Tracing SDK在你自己的代码里打 slice 埋点理解自定义执行流程如果你的需求只是看现成的 trace 文件用官方 UI 网页就够了如果要录制 → 分析 → 自动化全流程才需要这个仓库。 快速上手从 clone 到打开第一条 trace第一步获取项目拿到录制脚本git clone https://gitcode.com/GitHub_Trending/pe/perfetto克隆下来就能用命令行录制脚本在 tools/record_android_trace分析入口在 tools/trace_processor都不需要自己编译。第二步基本配置参数只留四个录制不用手写配置文件脚本用四个参数覆盖绝大部分场景-t 10s录多久-b 32mb缓冲区多大-a *启用哪些 atrace 分类换成包名可只录指定应用末尾的sched freq view ss input启用 CPU 调度、频率等关键探针缓冲区有三种录制模式缓冲区满了就停Stop when full、满了覆盖最旧数据Ring buffer、定期落盘支持长 traceLong trace官方 UI 的录制设置页把它们摆得很清楚第三步跑通第一次 trace 录制python3 tools/record_android_trace -o trace.perfetto-trace -t 10s -b 32mb -a * sched freq view ss input运行后的 10 秒内在手机上做你想观察的动作——打开应用、滚动列表都行。录制结束脚本会自动在浏览器打开官方 UI第一条 trace 就躺在时间轴上了图里从上到下各 CPU 核的运行条、各核的频率曲线、每个进程的线程 slice。左侧边栏可以勾选显示/隐藏轨道鼠标滚轮缩放时间轴点任意 slice 看详情。 实战演练用 10 秒 trace 定位应用一卡一卡的现象日志给不出线索用户反馈打开信息流后滚动卡顿机器发烫。你抓了 logcat只有几条零星报错查不出原因。卡顿多半不是应用代码慢而是系统没跟上——线程被调度饿着、CPU 频率压在低档位、Binder 调用排队这些细节只在系统级 trace 里可见。收集数据录一条 10 秒系统 trace直接复用快速上手的命令唯一改动是把-a *换成目标包名比如-a com.example.app只录你的应用和系统探针。录制期间反复滑动卡顿的页面确保卡顿被复现进去。分析定位时间轴粗看SQL 精算先看时间轴展开目标进程的主线程轨道找到长 slice 之间被空窗打断的段落——线程在该时间段没被调度空窗多长用户就卡多久。再用 SQL 把感觉变成数字。在侧边栏点 Query (SQL)粘入INCLUDE PERFETTO MODULE linux.cpu.utilization.process; SELECT name AS process_name, time_to_ms(SUM(runtime)) AS runtime_msec, SUM(megacycles) AS sum_megacycles FROM cpu_cycles_per_process JOIN process USING (upid) GROUP BY process_name ORDER BY runtime_msec DESC LIMIT 5;结果按 CPU 周期消耗megacycles排名一眼看出这段时间谁在吃 CPU锁定进程后换用 slice 级模块linux.cpu.utilization.slice查询cpu_cycles_per_thread_slice表就能找到进程内最烧 CPU 的函数inflate、onDraw 这类名字出现时优化方向就很明确了。这条查询的完整写法在 docs/getting-started/android-trace-analysis.md 里可以直接抄。验证结果改完再录一遍对比同一组数字优化落地后比如列表项复用、减少每帧布局用完全相同的参数再录一次跑同一条 SQL 对比runtime_msec和 P90 slice 耗时。下降明显优化成立这套录制 → SQL → 对比的流程稍加封装就能进 CI当性能回归基线用。⚠️ 常见坑与注意事项缓冲区太小数据悄悄丢了Stop when full 模式在缓冲满时直接停止录制trace 文件看起来还挺正常。长 trace 要么加大-b要么换 Ring buffer 模式。探针一次开太多每个 atrace 分类和 data source 都有开销开得多 trace 文件又大又重。从 sched/freq 加少量 atrace 分类起步不够再加。录制期间不触发目标动作10 秒窗口很短不做操作就只录到了待机状态分析时什么都找不到。时间单位是纳秒表里 ts、dur 全是 ns换算成毫秒要除以 1e6不然数字大得离谱。系统级录制只官方支持 Android 和 LinuxWindows/macOS 上虽然有录制守护进程但没有系统数据源集成录出来的 trace 基本没用详见 docs/getting-started/system-tracing.md。 进阶方向与相关资源PerfettoSQL 与现成分析模块从 docs/analysis/perfetto-sql-getting-started.md 学起内存、调度等更多分析配方见 docs/getting-started/android-trace-analysis.md。脚本化与批量分析命令行 docs/analysis/trace-processor.md、Python API docs/analysis/trace-processor-python.md同一套 SQL 可复用到批量 trace 的 docs/analysis/batch-trace-processor.md。给自己的 C 代码打点docs/instrumentation/tracing-sdk.md对应头文件在 include/perfetto/tracing.h。多台设备集中采集BigTracedocs/deployment/multi-machine-architecture.md。AI 辅助分析 trace仓库自带一组 trace 分析技能见 ai/skills/perfetto/可以让 AI 代理替你写 SQL 并解释结果。【免费下载链接】perfettoProduction-grade client-side tracing, profiling, and analysis for complex software systems.项目地址: https://gitcode.com/GitHub_Trending/pe/perfetto创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表