性能监控(APM)
除崩溃外,性能问题是中小团队第二大痛点。Argus 的应用性能监控(Application Performance Monitoring,APM)采集端上启动时长、卡顿 / FPS、网络请求、内存四类指标,在 Console 按均值与 百分位聚合,帮你发现”平均没问题、长尾很卡”的场景,并定位疑似内存泄漏的会话。
电量分析与 CPU 归因永久不在范围内(ADR-0032 )。 APM 只做上述四类性能指标。
核心概念
| 指标类别 | 采集内容 | 说明 |
|---|---|---|
| 启动性能 | 冷启动 / 热启动 / TTI(Time To Interactive,可交互时长) | 跨端锚点口径见 指标口径字典 |
| 卡顿 / FPS | 单帧超过设备刷新率帧预算即为卡顿(Jank);主线程阻塞 ≥ 700ms 归一为 AppHang | Android 系统级 ANR(5s)为独立事件 error_type=ANR |
| 网络 | 每次 HTTP 请求的 DNS / TCP / TLS / TTFB / 下载分阶段耗时、失败率、超时率 | 按域名 / 接口维度聚合 |
| 内存 | 使用峰值 / 平均、Android 内存细分、OOM 检测、内存泄漏会话识别 | 泄漏识别为服务端对每会话 memory_mb 做线性回归取斜率 |
采样与聚合:高频指标(FPS 按 5s 窗口、内存按 ≥ 30s 间隔)在 SDK 内本地聚合后上报,而非逐帧 / 逐秒——既省电省流量,也避免打爆事件配额。采样率随事件一并上报,供服务端聚合时做权重还原。
接入
APM 由端上 SDK 自动采集,无需额外埋点。选择你的平台完成接入:
| 平台 | 自动采集 | Quickstart |
|---|---|---|
| iOS | 启动 / 卡顿栈(AppHang)/ FPS / 网络 / 内存细分 / OOM | iOS SDK |
| Android | 启动 / 卡顿栈 / FPS / 网络(OkHttp)/ 内存细分 / OOM / ANR | Android SDK |
| Web | Web Vitals(LCP / INP / CLS) | Web SDK |
DSN 配置与签名机制见 DSN 与 HMAC 签名。所有采集均遵守 SDK 自保护基线 : 开启卡顿 / FPS 采集相对关闭时宿主 CPU 差 < 1%,网络 hook 抛异常也不阻断业务请求(fail-open)。
网络监控隐私:上报前对 URL 的 query string 与路径参数做脱敏(token / email / 手机号等命中 敏感模式的值会被 mask),默认不采集请求 / 响应 header 与 body;网络 hook 自动排除 Argus 自身 上报域名,避免递归观测。详见 隐私与合规基线 。
Console 使用
打开 Console → APM(/apm):
- 指标聚合表:每个 metric 一行,列出单位、样本数、avg、p50、p95、p99、min、max。看 p95 /
p99 才能发现被均值掩盖的长尾卡顿——
p99列以红色高亮。 - 内存增长会话(疑似泄漏):按会话
memory_mb增长斜率排序。内存增长有正常原因(缓存、资源 加载),此表只作排查线索,非确诊。 - 跳转链路:APM metric 本身不带
trace_id,页面提供「查看分布式链路(Traces)→」入口,进一步 到 分布式追踪 排查慢请求的完整调用链。
SDK API:自定义业务指标
除自动采集外,可上报自定义业务指标(如”商品列表加载时长”):
Argus.metric(name, value, tags)上报后与内置指标一样进入 APM 聚合表。各端具体签名以对应平台 SDK README 为准。
MCP 工具
在 Claude / Cursor 里可用以下只读工具查询性能数据(详见 MCP Server):
| 工具 | 用途 |
|---|---|
apm.stats | 按 metric 聚合 p50 / p95 / p99 与样本数 |
apm.search | 按维度(设备 / OS / 版本 / 网络类型)检索性能事件 |
apm.memory_growth | 列出疑似内存泄漏(增长斜率为正)的会话 |
配额与计费
1 个 APM 事件 = 1 个计量事件(含启动 / FPS / 网络 / 内存)。高频指标本地聚合后上报,网络明细默认 聚合、仅异常(失败 / 超时 / 慢请求)全量采集,避免逐请求明细打爆配额。计量口径见 套餐、配额与计费。
常见问题
Q:为什么均值正常但用户还是觉得卡? 看 p95 / p99。均值会被大量正常帧摊平,真正的卡顿藏在长尾里。
Q:内存增长会话一定是泄漏吗? 不一定。斜率为正只说明该会话内存持续上涨,可能是正常缓存 / 加载。它是排查起点,不是结论。
Q:能做耗电分析吗? 不能,也不会做——电量与 CPU 归因是永久排除项。
Q:Web 端能采集启动时长吗? Web 侧采集的是 Web Vitals(LCP / INP / CLS),与移动端”点击图标到首屏”的冷启动口径不同,跨端对比 时注意可比性边界。