Skip to content
阅读进度

如何使用 Perfetto 分析应用的主线程阻塞点? ​

返回 性能与稳定性 目录

标准回答 ​

Perfetto 把线程何时运行、等待谁、执行多久画在同一条时间线上。先找到慢的区间,再追原因。

  • 固定复现区间,定位对应启动或慢帧。
  • 沿主线程切片、线程状态、Binder flow、RenderThread 和调度轨迹追踪。
  • 修改后在相同条件下重复采样,确认关键路径缩短。

通俗例子 ​

点击后主线程有 80ms 空档:看它是在运行 Java、等锁,还是等 Binder 返回。只有知道等待对象,才能选择搬线程、改锁或改调用。

深入解释 ​

**先判断线程处于什么状态:**Running 表示正在占用 CPU;Runnable 通常表示可运行但还没得到 CPU;睡眠或阻塞则可能是在等消息、锁或其他服务。长时间没运行不必然是代码算得慢。

**再沿证据追原因:**若主线程卡在同步 Binder 调用,就查看服务端对应处理;若等锁,就找持锁线程。最后用同一操作复采 Trace,验证修改确实缩短了关键等待。

易混淆点 ​

切片很长不一定代表 CPU 很忙;Runnable 但没运行可能是调度竞争。

参考资料 ​

内容来源 ​

用完整回答理解机制,用真实证据解释项目。