Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

APM 与线上监控

☆ APM 是把“性能优化“从本地经验升级成线上体系的关键。你的风控 SDK 背景可以重点讲 native crash、采样、灰度和宿主影响控制。

一、APM 监控什么

类型指标关键证据
CrashJava crash、native crash、崩溃率堆栈、版本、机型、ABI
ANR主线程阻塞、输入超时、广播/Service 超时traces、主线程栈、锁等待
卡顿慢帧、冻结帧、帧率Choreographer/FrameMetrics/Perfetto
启动冷启动、首帧、可交互时间launch trace、业务埋点
网络成功率、耗时、错误码、弱网interceptor、DNS/TLS/connect/read 分段

二、Crash 监控:Java 与 Native

Java crash 常通过 Thread.setDefaultUncaughtExceptionHandler 捕获;native crash 需要 signal handler 或 Breakpad/Crashpad 这类方案。

面试边界:不要说“所有 native crash 都能优雅恢复“。多数情况下只能采集现场、下次启动上报、灰度回滚。

三、ANR 与卡顿监控

  • ANR:系统判定,重点是拿到 traces 和主线程阻塞证据。
  • 卡顿:应用侧可用主线程 watchdog、Choreographer 帧回调、FrameMetrics 监控。
  • 线上采样必须控制开销,避免监控本身制造卡顿。

四、启动与网络监控

启动监控要区分进程创建、Application、首 Activity、首帧、业务首页可交互。网络监控要拆 DNS、TCP、TLS、请求、响应、解析,不要只报一个总耗时。

五、上报链路、采样与隐私

  • 本地缓存:避免 crash 当场丢失日志。
  • 批量上报:减少电量和流量开销。
  • 采样:高频事件不能全量。
  • 隐私:不上传明文 token、手机号、身份证、设备敏感字段。

六、怎么把 SDK 经历讲成亮点

可以这样组织:“SDK 嵌入宿主 App 后,我关注的不只是功能成功,还要保证不拖累宿主稳定性。我们会监控 native crash、初始化耗时、线程/网络开销,灰度阶段看指标,异常时能按版本/ABI/机型聚合定位。”

高频面试题

Q1:线上卡顿怎么监控? 答:轻量方案是主线程 watchdog 或 Choreographer 统计慢帧;深入定位要结合 Perfetto/trace。线上只采样关键指标,本地复现再做完整 trace。

Q2:native crash 怎么定位? 答:采集 signal、寄存器、线程栈、so build id/版本/ABI,结合未 strip 符号或 symbol server 还原堆栈,按版本和机型聚类。

Q3:APM SDK 会不会影响性能? 答:会,所以要采样、异步、批量、延迟上报,关键路径不做重 IO,监控逻辑本身也要被监控。

易错点 / 追问

  • 不要把本地 Profiler 等同于线上 APM。
  • 不要上传敏感业务数据。
  • 不要只讲采集,还要讲聚合、告警、灰度回滚和修复闭环。