Administrator
发布于 2026-08-07 / 19 阅读
0
0

android systrace工具使用

Systrace 分析核心是‌用 Chrome 打开 trace.html,通过线程颜色状态(绿/蓝/白/橙/紫)定位主线程阻塞、帧超时(>16ms)及 IPC/IO 等待,结合调用栈锁定代码瓶颈‌。‌‌

核心分析流程

  1. ‌生成数据‌:连接设备开启 USB 调试,执行 python systrace.py --time=N -o trace.html [categories](常用类别:sched gfx view wm input binder),复现卡顿场景后回车停止 。

  2. ‌加载视图‌:Chrome 访问 chrome://tracing/ 点击 Load 导入 html 文件,或使用新版 Android Studio Profiler 直接查看 。

  3. ‌定位瓶颈‌:聚焦‌主线程(UI Thread)‌,查找长耗时色块、红色掉帧标记及非绿色状态区间 。

  4. ‌下钻归因‌:点击色块查看调用栈(Call Stack),确认是业务逻辑、锁竞争、IO 还是 Binder 通信导致 。‌‌

关键指标与颜色解读

  • ‌绿色 (Running)‌:线程正在 CPU 执行。若单段过长(>16ms)说明计算繁重或主线程阻塞 。

  • ‌蓝色 (Runnable)‌:线程就绪但未获调度,持续过长表明 CPU 满载或优先级被挤占 。

  • ‌白色 (Sleeping)‌:线程休眠(通常等锁或事件),正常;若频繁切换需检查锁机制 。

  • ‌橙色 (Uninterruptible Sleep)‌:‌IO 阻塞‌(如磁盘读写),底部常标有 wait_on_page_locked,是卡顿常见因 。

  • ‌紫色 (Interruptible Sleep)‌:内核态等待(如内存管理),需结合具体场景判断 。

  • ‌帧时间轴‌:顶部 Rendering 栏中,‌绿色圆点≤16.6ms‌,‌红/黄点>16.6ms‌即为掉帧(Jank)。‌‌

高效操作技巧

  • ‌快捷键‌:W/S 缩放时间轴,A/D 平移,M 高亮选中段及其边界,1/2/3/4 切换选择/平移/缩放/计时模式 。

  • ‌唤醒分析‌:查看蓝色等待段上方,确认‌谁唤醒了该线程‌,追踪跨进程(如 App 等待 SystemServer AMS)调用链 。

  • ‌自定义标记‌:代码中插入 Trace.beginSection("MethodName") / endSection(),在报告中精准定位具体函数耗时 。‌‌

常见场景排查方向

  • ‌启动慢‌:检查 ActivityThread 生命周期、Zygote fork 耗时、SurfaceFlinger 首次合成时间 。

  • ‌滑动卡顿‌:观察 Choreographer#doFrame 是否超时,主线程是否存在大量 traversal、measure、layout 或 draw 堆积,RenderThread 是否阻塞 。

  • ‌点击无响应‌:排查 Input 事件分发延迟,主线程是否被长 IO(橙色)或死锁(白色长条)占用 。‌‌

注意:Android 10+ 建议使用 debug.atrace.tags.enableflags=0x1FFF 获取完整标签;若工具链缺失,可从 Android SDK platform-tools/systrace/ 获取或改用 Android Studio 内置 CPU Profiler 。‌‌

https://source.android.com/docs/core/tests/debug/systrace?hl=zh-cn


评论