第 17 章

APM 工具与性能监控生态

适用 Android 8 (API 26) - Android 17 (API 37) · 内容验证 2026-08-14

第 14 章介绍线下 trace(按时间排列的性能事件记录)分析,第 15 章覆盖 Android Studio Profiler、CPU 采样工具 simpleperf、系统状态查询命令 dumpsys 等单项工具,第 16 章说明证据组织与判断方法。第 17 章围绕 APM 选型与采集机制,同时说明配套的开发验证、实验室回归和设备基线测试。

应用上线后仍会出现卡顿、启动慢、ANR(Application Not Responding,应用无响应)、内存泄漏和 OOM(Out of Memory,内存耗尽),但通常无法通过 adb(Android Debug Bridge)直连用户设备采集 trace。APM(Application Performance Monitoring,应用性能监控)通过采样率、触发条件、数据量和上传时机限制额外的 CPU、I/O(输入/输出)与网络开销,用于发现、聚合和定位这些问题。

全景分类

工具按四个层级组织:App 层负责设备内采集,Framework(框架)层提供平台或 Jetpack(Android 官方支持库)API,平台层负责数据汇聚与分析,System 层用于实验室基准测试和自动化。“状态”描述截至 2026-08-14 的公开维护信号和本章建议用途,不代表市场占有率。仓库最近有提交只说明代码仍在变化,不能单独证明它兼容 Android 17、当前 AGP(Android Gradle Plugin)或所有 ABI(Application Binary Interface,应用二进制接口);接入结论仍需按具体版本实测。

App 层:客户端 APM 框架

表中的“线上”指生产环境中的用户设备,“线下”指开发、测试或实验室环境。

工具 来源 核心能力 线上/线下 状态
Matrix 腾讯微信 卡顿、启动、I/O、内存、APK 检查 线上 成熟项目;最近公开提交较早,接入前验证 AGP 与平台 API
KOOM 快手 Java / Native(C/C++)/ 线程泄漏、OOM 线上 有近期维护记录;接入前验证目标 API 与 ABI
btrace / RheaTrace 字节跳动 运行时 Hook、同步抓栈与方法 trace 受控诊断 Android 17 需修复 ART 私有接口与 16 KB 兼容性,不直接接入生产项目;详见 17.2
LeakCanary Square Activity / Fragment / ViewModel 泄漏检测 线下 活跃维护;适合开发与测试阶段
BlockCanary 主线程卡顿堆栈捕获 线上 维护停滞;仅作原理参考
DoKit 滴滴 FPS(每秒帧数)、启动、网络、调试工具箱 线下 维护频率较低;以线下调试为主
ArgusAPM 360 UI(界面)、网络、内存、卡顿、ANR 线上 历史项目;仅作原理参考
Measure 开源 崩溃、ANR、trace、会话时间线 线上 活跃维护
AndroidGodEye 开源 CPU、内存、网络、电量、FPS 线下 历史项目;仅作原理参考
Collie 开源 FPS、卡顿、流量、内存、启动 线上 历史项目;仅作原理参考
Rabbit 开源 测速、慢函数、网络、卡顿、FPS 线上+线下 历史项目;仅作原理参考

Framework 层:Google 官方 SDK(软件开发工具包)

工具 Jetpack / 平台模块 核心能力 状态
JankStats androidx.metrics:metrics-performance 1.0.0 检测卡顿帧,并附带当时的 UI 状态 稳定版
FrameMetrics android.view.FrameMetrics / Window.OnFrameMetricsAvailableListener(API 24+) 细分一帧各阶段的耗时;FrameMetricsAggregator 提供 AndroidX 聚合 平台稳定能力
Tracing SDK androidx.tracing:tracing-* 2.0.0;旧 tracing-perfetto / -binary / -handshake 1.0.1 系统 trace 区间,以及 2.0 新增的进程内缓冲区、flow(跨事件关联)、annotation(键值注释)和协程 trace 稳定版;两组产物需区分
Microbenchmark(微基准) androidx.benchmark 测量一小段代码的执行时间和内存分配 稳定能力
Macrobenchmark(宏基准) androidx.benchmark 从应用外部测量启动、滑动和复杂 UI,从操作触发一直覆盖到结果展示 稳定能力
Baseline Profiles(基线配置文件) Android Gradle Plugin / Jetpack 提供关键代码路径,让 ART(Android Runtime)提前生成 AOT(Ahead-of-Time,预先编译)代码;Play Cloud Profiles 是按真实设备数据生成的云端配置 稳定能力
ProfilingManager android.os Android 15(API 35)起请求堆内存采样(heap profile)、Java 堆转储(heap dump)、调用栈采样(stack sampling)和系统 trace 新平台能力

Tracing 2.0 的新接口把带字段的事件写入应用进程控制的缓冲区,Android Studio 的 System Trace 目前不会自动采集这部分数据;Benchmark 1.5 可以在测试结束后合并,核验时最新版本为 1.5.0-rc01(RC,候选发布版)。低频、希望始终进入系统 trace 缓冲区的事件,仍适合使用 Trace.beginSectionandroidx.tracing.trace {}。这里的 slice 指带开始和结束时间的区间事件。

平台层:商业/服务端 APM

工具 来源 定位 状态
Firebase Performance Google 自动采集启动、页面渲染和网络数据,并支持自定义 trace 托管服务
Sentry 开源 崩溃、性能 tracing 与分布式 trace(关联客户端请求和服务端调用) 开源 SDK + 托管/自建平台
APMPlus 字节/火山引擎 移动 APM 平台 商业平台
Bugly 腾讯 崩溃 + ANR 上报 商业平台
CAT 美团开源 分布式监控(偏服务端) 服务端方案;移动端仅作关联参考
PerfDog 腾讯 WeTest 免 Root(无需系统超级用户权限)测试 FPS / CPU / GPU / 内存 / 功耗 商业测试工具

托管服务的可用功能、计费、数据存储和处理地区、隐私条款会变化,选型时应以部署区域的官方说明和合同为准。

System 层:Benchmark 与自动化

Benchmark(基准测试)用固定的一组操作(工作负载)比较设备或版本。分数只有在工具、测试项目、资源包、运行轮次,以及设备温度和降频状态一致时才可比较。

工具 定位 状态 使用边界
Geekbench 7 CPU 单核/多核 + GPU Compute(通用 GPU 计算) 当前版本 Android 12+、至少 4 GB 内存;旧版本分数应保留为独立基线
AnTuTu(安兔兔) 综合性能(CPU / GPU / 内存 / UX,即用户体验) Android 11.1.4(核验时) 工具版本与 3D 资源包必须一致;结果还受温度和机型配置影响
3DMark GPU + 游戏性能 当前维护 固定 Steel Nomad Light、Solar Bay、Wild Life 等具体测试及其版本;压力测试与单次跑分分开记录
PCMark 生产力、日常使用与存储测试 Android 3.1.4113(核验时) 固定 Work 3.0 或 Storage 2.0;不同工作负载版本的分数不能直接比较
Speedometer 3.1 浏览器 / WebView 内 Web 应用的响应速度 当前 Web benchmark 结果受浏览器内核、WebView 版本和设备热状态影响
CPDT 跨平台存储读写测试 公开版 2.4.0;发布节奏较慢 用于补充存储吞吐观察,仍要结合设备温度、缓存和文件系统状态复核
SoloPi 自动化测试与设备端性能采集 维护频率较低 适合专项测试,不能替代系统 trace

Vellamo、AndroBench、A1 SD Bench、Emmagee 不再作为现代 Android 的推荐入口。它们保留在具体小节里,用于阅读旧报告或理解历史方案:Vellamo 已下架;旧版 AndroBench / A1 SD Bench 以早期存储权限、文件路径和测试模型为前提,结果不能直接代表现代 UFS(Universal Flash Storage,通用闪存存储)或真实应用负载;Emmagee 对 Android 10+ 的权限、后台限制和进程模型覆盖不足。

与其他章节的关系

  • 第 14 章(Perfetto):Perfetto 是线下 trace 分析工具。btrace/RheaTrace 可以把方法调用写成可导入 Perfetto 的 trace 数据;Trace.beginSection / androidx.tracing.trace {} 把 slice 写入系统 trace 缓冲区,Tracing 2.0 还提供应用进程控制的记录方式。JankStats 不生成 Perfetto trace 文件,它通过 OnFrameListener / FrameData 输出帧级 jank(异常卡顿帧)和 UI state(当时的界面状态),适合与 Perfetto、FrameTimeline(系统记录的帧时间线)和 Tracing SDK 一起定位原因。
  • 第 15 章(其他分析工具):15.10 统一说明第三方性能库、APM 可观测性(通过指标、日志和 trace 了解运行状态)选型与 Hook(拦截或替换调用)基础设施;第 17 章分别展开具体工具。
  • 第 16 章(方法论):16.3 和 16.1 说明线上监控,以及问题交接、负责人、修复和回归检查流程;第 17 章说明各工具的能力与边界。

内容索引

阅读建议

  • 初次搭建线上 APM:先读 17.1,再按当前问题选择 2—3 个工具。
  • 已在使用某个工具:直接进入对应条目核对实现与边界。
  • 需要选型:结合 15.10 的基础设施边界和各工具的详细分析。
  • 关注回归与实验室测试:17.6 负责 Jetpack Benchmark 测量协议,17.7 负责操作复现、设备 Benchmark 与性能档位分组。

正文《Android 技术内幕》作者 高建武(Gracker),原仓库 Gracker/android-internals-wiki,以 CC BY-NC-SA 4.0 授权。本站是个人非商业阅读版改编,非官方站点。正文字体 霞鹜文楷(SIL OFL 1.1,授权全文)。