跳转至

ANR 检测

检测 ANR(Application Not Responding)事件,通过多信号分析定位根因。

概述

当应用主线程被阻塞过长时间(通常 5 秒以上)时会发生 ANR。perfetto-cli 从 Perfetto trace 中检测 ANR 事件并对其严重程度进行分级。

命令

anr detect

检测 ANR 事件并进行严重程度分级。

perfetto-cli -t trace.perfetto-trace -p com.example.app anr detect

选项:

选项 说明 默认值
--min-duration <ms> 最小 ANR 持续时间

示例输出:

ANR Events (2 found)
┌──────────┬──────────┬──────────────┬──────────┐
│ Time     │ Duration │ Thread       │ Severity │
├──────────┼──────────┼──────────────┼──────────┤
│ 5.234s   │ 6.1s    │ main         │ CRITICAL │
│ 12.001s  │ 5.3s    │ main         │ HIGH     │
└──────────┴──────────┴──────────────┴──────────┘

anr root-cause

多信号根因分析。关联 CPU、锁竞争、Binder 和 I/O 信号来定位最可能的原因。

perfetto-cli -t trace.perfetto-trace -p com.example.app anr root-cause --anr-timestamp 5000

选项:

选项 说明 必填
--anr-timestamp <ms> 要分析的 ANR 事件时间戳

工作流程

  1. 运行 anr detect 找到 ANR 事件及其时间戳
  2. 选择目标 ANR 时间戳
  3. 运行 anr root-cause --anr-timestamp <ts> 进行详细根因分析

提示

  • 使用 --min-duration 过滤边界情况,专注于严重 ANR
  • 结合 cpu contention 查看锁竞争是否导致了 ANR
  • 使用 -f json 将 ANR 检测集成到 CI 流水线中