android Perfetto cpu分析教程及案例

以下是 Android Perfetto 的 CPU 分析完整教程及实战案例,结合核心指标解读和典型问题解决方案:


🔧 一、Perfetto CPU 分析基础配置

  1. 关键抓取配置

    • 启用 Scheduling details 捕获线程调度细节
    • 勾选 Coarse CPU usage counter 获取整体 CPU 占用率
    • 开启 CPU frequency 监控核心频率变化
      需通过 ADB 命令或开发者选项启动记录
  2. 核心分析区域定位

    • CPU 轨道:顶部显示各核心调度状态(0-7 为核心编号)
    • 线程状态标识
      • ✅ 深绿:Running(执行中)
      • 🟢 浅绿:Runnable(就绪待调度)
      • 白色:Sleeping(休眠)
      • 橙色:Uninterruptible Sleep(IO 阻塞)

📊 二、CPU 关键指标解析方法

  1. 频率与调度诊断

    • 点击任务条 → 查看 Running on CPU X 定位任务所在核心
    • 悬停对应 CPU 频率轨道,检查任务执行时的实时频率
    • 典型问题:任务被调度到小核(如 CPU4-7)或频率锁低导致延迟
  2. CPU 利用率计算

    markdown 复制代码
    CPU 利用率 = (Wall Duration / 时间段) / 核心数
    • 操作 :框选时间段 → 查看底部 Slices 中的 Wall Duration
    • 示例:Wall Duration 3049ms / 427ms 时间段 / 8 核 = 712.77% 利用率
  3. 线程状态问题定位表

    状态 颜色 含义 优化方向
    Runnable 堆积 浅绿 CPU 资源竞争激烈 检查锁竞争或优先级反转
    Uninterruptible Sleep 橙色 IO 阻塞(磁盘/网络) 优化文件读写或网络请求
    Running 耗时过长 深绿 代码执行效率低 算法优化或减少解释执行

🔍 三、实战优化案例

案例 1:渲染卡顿分析(温控降频)
  • 现象Choreographer#doFrame 执行超时
  • 分析步骤
    1️⃣ 定位帧绘制任务 → 发现运行在 CPU6(小核)
    2️⃣ 查看频率轨道:CPU6 频率限制在 1.2GHz(低于大核满频)
    3️⃣ 关联温度轨道:设备 42°C 触发温控降频
  • 解决方案
    • 拆分渲染任务到多帧
    • 降低非关键线程优先级
案例 2:后台服务抢占资源
  • 现象:音乐播放卡顿
  • 分析步骤
    1️⃣ 框选卡顿时段 → 查看 Slices 排序
    2️⃣ 后台服务占 40% CPU 时间(Wall Duration 超标)
    3️⃣ 线程状态显示 Runnable 堆积
  • 解决方案
    • 通过 cpuset 限制后台服务到小核
    • 修改系统配置:/device/.../init.hardware.rc
案例 3:SQL 精确计算线程 CPU 占用
sql 复制代码
SELECT SUM(dur) / 1e9 AS cpu_time 
FROM sched_slice 
WHERE ts > 723450000 
AND ts < 723880000 
AND utid = 45
  • 用途:计算线程 45 在 430ms 内的精确 CPU 占用

️ 四、进阶优化策略

  1. 核心绑定策略

    • ⚡ 高优先级任务(如指纹解锁)→ 绑定大核
    • 🌐 后台常驻服务 → 绑定小核
    • 实现:修改 cpuset 子系统配置(参考 Android 源码)
  2. 频率问题定位

    • 🔄 Running 时间长但频率正常 → 优化代码逻辑
    • 📉 频率频繁波动 → 检查温度轨道(Power Temperature

💎 CPU 问题速查表

现象 可能原因 验证方法
任务执行时间波动大 大小核调度不均 检查任务所在核心编号
CPU 占用高但卡顿 频繁 IO 阻塞 分析 Uninterruptible Sleep 状态
突发卡顿+温度升高 温控降频/关核 关联温度与频率轨道

引用链接:

1.DIMENSITY PROFILER:安卓游戏调优,从未如此轻松 - 哔哩哔哩

2.Android 经验总结之性能Trace调试 - CSDN博客

3.Android性能分析利器:Perfetto深度定制与实战解析 - CSDN博客

4.Android Perfetto 系列 1:Perfetto 工具简介 - 腾讯云

5.android perfetto怎样分析 - 亿速云

6.android perfetto 使用实例解析 - 51CTO博客

7.android perfetto 分析实例 - 51CTO博客

8.android perfetto的使用案例有哪些 - 亿速云

9.Perfetto 上手指南3 ------ CPU 信息分析 - 掘金开发者社区

10.Android性能分析工具-Perfetto基本使用 - CSDN博客

11.Perfetto分析手机中CPU的状况 - 51CTO博客

12.Perfetto-Android开发分析神器(性能、内存、线程调度) - CSDN博客

13.[061]perfetto使用简介 - 腾讯云

14.android系统使用perfetto工具分析掉帧 - 51CTO博客

15.如何分析手机中CPU的状况 - 之昂菌-钛

16.Perfetto 上手指南2 ------ 基础使用 - 稀土掘金

17.Android性能优化--Perfetto用SQL性能分析 原创 - 清霜辰 - 博客园 - 博客园

18.Android Perfetto 系列 3:熟悉 Perfetto View - 博客园

19.【Android CPU 优化】Android CPU 调优 ( Trace 文件分析 | Android Profiler 工具 | CPU Profiler 工具 ) - 腾讯云

20.Perfetto性能分析 - 之昂菌-钛

相关推荐
踢球的打工仔1 天前
PHP面向对象(7)
android·开发语言·php
安卓理事人1 天前
安卓socket
android
安卓理事人1 天前
安卓LinkedBlockingQueue消息队列
android
万能的小裴同学1 天前
Android M3U8视频播放器
android·音视频
q***57741 天前
MySql的慢查询(慢日志)
android·mysql·adb
JavaNoober1 天前
Android 前台服务 "Bad Notification" 崩溃机制分析文档
android
城东米粉儿1 天前
关于ObjectAnimator
android
zhangphil1 天前
Android渲染线程Render Thread的RenderNode与DisplayList,引用Bitmap及Open GL纹理上传GPU
android
火柴就是我1 天前
从头写一个自己的app
android·前端·flutter
lichong9511 天前
XLog debug 开启打印日志,release 关闭打印日志
android·java·前端