分析看板包含 4 个核心分析维度:概览、性能分析、异常分析、资源分析
概览 — 关键指标一目了然

- 流量指标 - 监控 UV(独立访客数)、会话数,帮助您把握整体用户活跃趋势
- 核心健康指标 - 突出显示三个移动应用核心指标:崩溃次数、无崩溃率、应用卡顿率,快速识别应用稳定性问题
- 用户访问趋势 - 通过时序图追踪 UV 和 Session 的变化趋势,洞察用户活跃规律
- 用户分布 - 结合地理位置分析用户来源,了解区域用户活跃情况
- 会话分析 - 统计会话平均时长分布趋势,评估用户粘性与使用深度
- 版本分布 - 监控不同系统版本(Android/iOS)和应用版本的用户占比,为兼容性优化与版本迭代提供数据支撑
性能分析 — 全面掌控应用体验

核心性能指标
顶部展示四个关键性能指标的 P75 分位值:- 应用启动时间(P75):监控应用启动耗时的 P75 分位数,评估启动性能表现。启动时间直接影响用户的第一印象和使用意愿。
- 帧率(P75):展示应用运行时帧率的 P75 分位数,衡量画面流畅度。目标为 60fps,数值越高表示交互越流畅。
- CPU 消耗(P75):追踪 CPU 占用率的 P75 分位数,识别计算密集型操作。过高的 CPU 消耗会导致设备发热和耗电增加。
- 内存使用(P75):监控应用内存占用的 P75 分位数,及时发现内存泄漏或异常增长。
APP 启动时间分析
- 启动时间趋势图:展示应用启动时间随时间的变化趋势,帮助您评估启动优化效果,及时发现性能退化。
- 样本分布柱状图:按时间区间统计启动耗时的分布情况(如 0.9425s-0.9642s、1.1162s-1.1379s 等),了解用户真实启动体验的分布特征,识别性能长尾问题。
视图性能明细
按视图名称(页面/Activity/ViewController)统计各项性能指标:- 访问次数:展示各视图的访问量,识别核心高频页面。
- 启动时间:监控各视图的加载耗时,定位加载缓慢的页面。
- 帧率:追踪各视图运行时的帧率表现,识别渲染性能问题。
- CPU 消耗:统计各视图的 CPU 占用情况,优化计算密集型页面。
- 内存使用:监控各视图的内存占用,发现内存泄漏风险。
流畅度分析
按视图名称统计应用流畅度相关指标:- 慢帧数:统计渲染耗时超过阈值的帧数(通常为 16.67ms,即低于 60fps),识别卡顿问题。慢帧会导致用户感知到明显的界面不流畅。
- 冻结帧数:记录界面完全冻结的帧数(通常超过 700ms),这些是严重影响用户体验的性能问题。
- 长任务数:追踪主线程长时间运行的任务数量(通常阈值为 100ms 或更长),定位性能瓶颈。长任务会阻塞用户交互和界面更新。
- 卡顿频率:统计应用卡顿的发生频率(次/秒),评估整体流畅度表现。
内存分析
按视图名称统计内存使用详情:- 平均内存:展示各视图的平均内存占用,了解常规内存消耗水平。
- 峰值内存:记录各视图运行期间的内存使用峰值,识别内存压力高峰,预防因内存不足导致的系统终止(OOM)。
- P75 内存:显示内存占用的 P75 分位数,反映大部分用户的内存使用情况,比平均值更能代表真实体验。
异常分析 — 快速定位与诊断错误

核心稳定性指标
- 崩溃次数:监控应用崩溃的发生总数和趋势,及时发现异常峰值。崩溃会导致应用强制退出,严重影响用户体验。
- 无崩溃率:跟踪无崩溃会话占比,评估应用整体稳定性表现。行业标准建议无崩溃率应保持在 99.5% 以上。
- ANR 率:统计 Android 应用无响应(Application Not Responding)的发生比例。ANR 表示应用主线程被阻塞超过 5 秒,用户会看到”应用无响应”对话框。
- 应用卡顿率:监控发生卡顿的会话占总会话的比例,用于评估应用流畅度问题的影响范围。卡顿通常指主线程长时间阻塞导致的界面冻结、响应延迟或帧率下降,影响用户交互体验。
错误数据统计
- 错误数:展示错误总数和时序趋势,了解应用健康状况的整体变化。
- 错误类型分布趋势图:通过堆叠面积图展示崩溃错误(crash_count)与非崩溃错误(non_crash_count)随时间的分布变化,快速识别异常时段和错误类型变化趋势。
- 崩溃错误(crash_count):导致应用强制退出的严重错误
- 非崩溃错误(non_crash_count):被捕获的异常,应用可继续运行但功能可能受影响
页面 Crash 排行(Top10)
列出崩溃次数最多的页面或视图控制器,每条记录包含:- 错误类型:崩溃的异常类型(如 java.lang.RuntimeException、SIGTRAP 等)
- 错误信息:错误的详细描述,帮助快速定位问题
- 错误数:该错误在该页面发生的总次数
- 会话数:受该错误影响的会话(用户访问)数量
热门 Issue(Top10)
展示影响用户最多的问题排行,每个 Issue 是经过聚合的错误集合,包含:- 错误类型:Issue 的主要错误类型(如 java.lang.RuntimeException、TypeError、ReferenceError 等)
- 错误信息:Issue 的典型错误描述,点击可查看详细堆栈和会话信息
- 错误数:该 Issue 包含的错误总次数
- 会话数:受该 Issue 影响的会话数量
错误类型分布
- 错误类型占比(饼图):展示不同错误类型的占比(如 ReferenceError、java.lang.RuntimeException 等),快速识别主要错误来源。
- 错误类型分布趋势(堆叠面积图):监控各错误类型随时间的变化趋势,及时发现新增错误类型或某类错误的异常增长。
版本 Crash 分布
- 版本 Crash 分布(饼图):统计不同应用版本的崩溃分布情况,识别高风险版本。
- 版本 Crash 分布趋势(堆叠面积图):监控各版本崩溃随时间的变化,评估新版本质量,必要时进行热修复或回滚。
系统版本异常分布
- 系统版本异常分布(饼图):统计不同操作系统版本(如 Android 11、Android 12、iOS 15 等)的异常分布情况,识别系统兼容性问题。
- 系统版本异常趋势(堆叠面积图):监控各系统版本异常随时间的变化,为系统兼容性优化提供数据支撑。
资源分析 — 精细化网络性能优化

- 请求数:监控网络请求总量的变化趋势,了解应用网络活跃度。
- 请求成功率:跟踪请求成功的比例,及时发现网络异常。
- 中位数请求时间:展示请求耗时的中位数变化(如 p50、p75、p95),评估整体网络性能水平。
- 慢请求:统计响应时间超过阈值的慢请求趋势,定位性能瓶颈。
- 异常请求:监控失败或错误请求的发生情况,快速识别接口问题。
- 资源请求状态分布:
- 请求状态码占比:通过饼图展示不同 HTTP 状态码的分布(如 200、404、500),识别异常请求类型。
- 请求状态码趋势:监控各状态码随时间的变化,及时发现异常峰值。
- 请求方式分布:
- 请求方法占比:展示不同 HTTP 方法(GET、POST 等)的使用分布。
- 请求方法趋势:分析各请求方法的时序变化。
- 静态资源:
- 静态资源调用排行:列出调用频率最高的静态资源(如图片、字体、配置文件等),了解资源使用热度。
- 静态资源响应排行:识别响应最慢的静态资源,优化资源加载性能。
- 网络调用排行:
- Host 排行:按请求来源(Host)统计请求数,识别主要依赖的服务端点。
- 资源耗时排行:列出耗时最长的网络请求,包含耗时详情(DNS 解析、TCP 连接、SSL 握手、首字节时间、响应时间等),精准定位性能瓶颈。
常见问题
为什么部分网络请求的状态码为 0?
为什么部分网络请求的状态码为 0?
状态码为 0 通常由以下原因导致:
- 请求被取消 - 用户在请求完成前离开页面或取消操作,导致请求中断
- 网络中断或超时 - 请求在发送过程中遇到网络中断、超时等异常情况,可能导致状态码无法正常返回
- 证书验证失败 - HTTPS 请求的 SSL 证书验证失败,连接建立前就被中断
- SDK 兼容性 - 在极少数情况下,特定系统版本或设备可能存在兼容性问题,导致数据采集不完整
错误数和 Issue 数量有什么区别?
错误数和 Issue 数量有什么区别?
- 错误数 - 指原始错误事件的总数,包括每一次错误发生的记录
- Issue 数量 - 指经过聚合后的问题数量。Flashduty 会根据错误堆栈、错误类型、发生位置等信息,将相似的错误聚合为同一个 Issue
聚合的优势:
- 便于定位问题根因:相同根因的错误归为一个 Issue,避免重复处理
- 优先级排序:通过影响范围(错误数、会话数)识别最需要修复的问题
- 追踪修复效果:修复一个 Issue 后,可观察该 Issue 下所有错误是否消失
如何提升无崩溃率?
如何提升无崩溃率?
1
定位高频崩溃
通过”页面 Crash 排行”和”热门 Issue”快速定位影响最大的崩溃问题。
2
分析堆栈信息
点击具体 Issue 查看详细的错误堆栈和用户环境信息,精准定位问题代码。
3
关注系统兼容性
通过”系统版本 Crash 分布”识别特定系统版本的兼容性问题。
4
监控版本质量
通过”版本 Crash 分布”评估新版本质量,必要时进行热修复或回滚。
5
增强异常捕获
合理使用 try-catch、全局异常处理器,避免未捕获异常导致崩溃。
P75、P50、P90 这些分位数是什么意思?
P75、P50、P90 这些分位数是什么意思?
分位数(Percentile)是统计学中衡量数据分布的重要指标:
示例:
| 分位数 | 含义 |
|---|---|
| P50(中位数) | 50% 的用户体验优于此值,50% 的用户体验劣于此值 |
| P75 | 75% 的用户体验优于此值,25% 的用户体验劣于此值 |
| P90 | 90% 的用户体验优于此值,10% 的用户体验劣于此值 |
| P95 | 95% 的用户体验优于此值,5% 的用户体验劣于此值 |
什么是慢帧、冻结帧和长任务?
什么是慢帧、冻结帧和长任务?
这些都是衡量应用流畅度的重要指标:
| 指标类型 | 阈值 | 用户体验影响 | 优先级 |
|---|---|---|---|
| 慢帧(Slow Frame) | 渲染耗时 > 16.67ms(60fps 标准) | 轻微卡顿 | 偶尔出现可接受,频繁出现需要优化 |
| 冻结帧(Frozen Frame) | 渲染耗时 > 700ms | 界面完全冻结,用户无法交互 | 严重影响体验,必须修复 |
| 长任务(Long Task) | 主线程执行 > 100ms | 阻塞用户交互和界面更新 | 需要优化 |
长任务常见原因:
- 复杂计算
- 大数据处理
- 同步 I/O 操作
如何提升页面加载性能?
如何提升页面加载性能?
1
定位慢页面
通过”页面加载耗时排行”识别加载最慢的页面,优先优化。
2
优化数据加载
- 采用分页加载或虚拟列表技术,避免一次性加载大量数据
- 使用数据预加载和缓存策略,减少等待时间
- 优化网络请求,合并接口调用
3
简化页面布局
- 减少视图层级嵌套,降低布局计算复杂度
- 避免过度使用透明视图和圆角效果
- 延迟加载非首屏内容
4
优化图片资源
- 使用合适的图片格式和尺寸
- 采用渐进式加载或占位图
- 对图片进行压缩和缓存
5
异步渲染
将复杂视图的渲染操作放到后台线程执行。
什么是 ANR,如何降低 ANR 率?
什么是 ANR,如何降低 ANR 率?
ANR(Application Not Responding) 是 Android 系统的应用无响应机制:
- 当应用主线程被阻塞超过 5 秒时,系统会弹出”应用无响应”对话框
- 用户可以选择”等待”或”关闭应用”
- ANR 严重影响用户体验,可能导致用户卸载应用
如何降低应用卡顿率?
如何降低应用卡顿率?
1
定位卡顿来源
通过”长任务监控”和”卡顿时长分布”识别导致卡顿的具体代码。
2
优化主线程任务
将耗时操作(如网络请求、数据库读写、复杂计算、大文件 I/O)移至后台线程。
3
优化 UI 渲染
- 减少视图层级,降低布局复杂度
- 避免在主线程进行复杂的视图计算
- 使用 RecyclerView(Android)或 UITableView/UICollectionView(iOS)的优化技巧
- 合理使用硬件加速
4
优化列表性能
- 实现视图复用机制
- 优化 item 布局复杂度
- 避免在 item 绑定时执行耗时操作
5
监控工具配合
结合性能分析看板和系统工具(Android Profiler、Xcode Instruments)定位具体卡顿代码。
建议根据业务特点和用户预期,设置合理的卡顿检测阈值(建议 200-500ms)。
如何采集用户信息?
如何采集用户信息?
登录态用户识别对于需要用户登录的应用(如电商、社交、金融等),您可以在用户登录后调用 SDK 的用户标识方法:
- Android: 参考 Android 用户会话配置
- iOS: 参考 iOS 用户会话配置
| 平台 | 可用标识符 |
|---|---|
| Android | Android ID、IMEI(需权限)、广告 ID |
| iOS | IDFV(Identifier for Vendor)、IDFA(需用户授权) |
如何优化网络请求性能?
如何优化网络请求性能?
1
识别慢请求
通过”资源耗时排行”定位响应时间最长的接口。
2
分析耗时分布
查看 DNS 解析、TCP 连接、SSL 握手、首字节时间等各阶段耗时,精准定位瓶颈。
3
针对性优化
| 优化方向 | 具体措施 |
|---|---|
| DNS 优化 | 使用 DNS 缓存、HTTPDNS |
| 连接优化 | 启用 HTTP/2、连接复用、减少重定向 |
| 传输优化 | 启用 GZIP 压缩、优化数据格式、减少请求体积 |
| 接口优化 | 优化后端接口性能、使用 CDN 加速静态资源 |
如何优化应用启动性能?
如何优化应用启动性能?
1
分析启动数据
- 查看”应用启动时间(P75)“指标,了解大部分用户的启动体验
- 通过”启动时间趋势图”评估优化效果,避免性能退化
- 查看”样本分布柱状图”识别长尾问题
2
延迟非关键初始化
将非必要的初始化操作延迟到首屏渲染后执行,缩短启动时间。
3
优化依赖加载
减少启动期间加载的第三方 SDK 和库,采用懒加载策略。
4
简化首屏布局
降低首页视图层级复杂度,减少首次渲染耗时。
5
使用启动优化工具
- Android: 使用 App Startup Library 管理组件初始化顺序
- iOS: 利用 Lazy Initialization 延迟初始化非关键组件
数据延迟是多少?
数据延迟是多少?
Flashduty RUM 通常在数据产生后的 1-3 分钟内完成采集和展示。在网络状况良好的情况下,大部分数据可实现准实时更新。
指标口径参考
概览指标
| 指标 | 采集字段 | 说明 |
|---|---|---|
| UV | usr_id | 去重后的用户总数 |
| 会话数 | session_id | 应用被打开使用的总会话数量 |
| 会话平均时长 | - | 会话总时长除以会话总数 |
| 使用频次 | - | 会话总数除以活跃用户数 |
性能指标阈值
| 指标 | 采集字段 | 良好 | 中等 | 差 |
|---|---|---|---|---|
| 应用启动时间 | view_app_start_time | 2s 以内 | 4s 以内 | 超过 4s |
| 帧率 | view_refresh_rate_average | 55 FPS 以上 | 50 FPS 以上 | 低于 50 FPS |
| CPU 消耗 | view_cpu_ticks_per_second | 低于 40 ticks/s | 低于 60 ticks/s | 60 ticks/s 以上 |
| 内存使用 | view_memory_average | 低于 100 MB | 低于 200 MB | 200 MB 以上 |
| 峰值内存 | view_memory_max | 低于 200 MB | 低于 400 MB | 400 MB 以上 |
流畅度指标
| 指标 | 定义 | 采集字段 |
|---|---|---|
| 慢帧数 | 渲染耗时超过 16ms 的帧数 | - |
| 冻结帧数 | 渲染耗时超过 700ms 的帧数 | - |
| 长任务数 | 执行时间超过 100ms 的任务数量 | long_task_duration |
| 卡顿频率 | 平均每秒发生冻结的次数 | - |
稳定性指标
| 指标 | 计算方式 | 说明 |
|---|---|---|
| 崩溃次数 | 直接统计 | 由未处理的异常或信号引起的崩溃总次数 |
| 无崩溃率 | 1 减去崩溃会话占比 | 建议保持在 99% 以上 |
| ANR 率 | ANR 会话数除以总会话数 | UI 线程阻塞超过 5 秒时触发(Android) |
| 应用卡顿率 | 卡顿会话数除以总会话数 | 主线程无响应超过 250ms 时计入(iOS) |
延伸阅读
SDK 接入与配置
Android SDK 接入指南
了解如何在 Android 应用中集成 RUM SDK
iOS SDK 接入指南
了解如何在 iOS 应用中集成 RUM SDK
Android 高级配置
深入配置 Android RUM SDK 高级功能
iOS 高级配置
深入配置 iOS RUM SDK 高级功能
Android 数据收集
了解 Android RUM SDK 收集的数据类型
iOS 数据收集
了解 iOS RUM SDK 收集的数据类型