返回笔记首页

应用稳定性监控完整指南

主题配置

一、崩溃率统计指标体系

1.1 行业标准指标

核心指标

  1. 崩溃率 (Crash Rate)
    • 公式: 崩溃用户数 / 活跃用户数 × 100%
    • 行业标准:
    • 优秀: < 0.1%
    • 良好: 0.1% - 0.5%
    • 可接受: 0.5% - 1%
    • 差: > 1%
  2. 崩溃次数率 (Crash Frequency Rate)
    • 公式: 崩溃次数 / 启动次数 × 100%
    • 行业标准:
    • 优秀: < 0.05%
    • 良好: 0.05% - 0.2%
    • 可接受: 0.2% - 0.5%
    • 差: > 0.5%
  3. 无崩溃用户率 (Crash-Free Users)
    • 公式: (活跃用户数 - 崩溃用户数) / 活跃用户数 × 100%
    • 行业标准:
    • 优秀: > 99.9%
    • 良好: 99.5% - 99.9%
    • 可接受: 99% - 99.5%
    • 差: < 99%
  4. 无崩溃会话率 (Crash-Free Sessions)
    • 公式: (总会话数 - 崩溃会话数) / 总会话数 × 100%
    • 行业标准:
    • 优秀: > 99.95%
    • 良好: 99.8% - 99.95%
    • 可接受: 99.5% - 99.8%
    • 差: < 99.5%

1.2 崩溃分级标准

P0 - 致命崩溃

  • 影响用户数 > 1000
  • 崩溃率 > 5%
  • 核心功能不可用
  • 导致数据丢失
  • 响应时间: 30分钟内响应,2小时内修复
P1 - 严重崩溃
  • 影响用户数 100-1000
  • 崩溃率 1%-5%
  • 主要功能受影响
  • 响应时间: 2小时内响应,24小时内修复
P2 - 一般崩溃
  • 影响用户数 10-100
  • 崩溃率 0.1%-1%
  • 次要功能受影响
  • 响应时间: 24小时内响应,3天内修复
P3 - 轻微崩溃
  • 影响用户数 < 10
  • 崩溃率 < 0.1%
  • 边缘场景
  • 响应时间: 7天内修复

二、Electron 崩溃监控

查看完整的 Electron 崩溃监控代码实现,包括主进程和渲染进程的错误捕获机制。

关键技术点:

  • 使用 crashReporter 捕获原生崩溃
  • process.on 监听主进程异常
  • window.onerror 捕获渲染进程错误
  • ErrorBoundary 组件防止应用白屏

三、Flutter 崩溃监控

Flutter 崩溃监控需要在多个层面捕获:

  • Flutter层: FlutterError.onError
  • Dart层: runZonedGuarded
  • 原生层: Platform Channels

四、增量更新实现

Electron 增量更新

  • 使用 bsdiff 算法生成差分包
  • 更新包体积减少 85%
  • 支持断点续传和版本回退

React Native 热更新

  • 集成 CodePush
  • 无需发版即可修复问题
  • 热更新覆盖率 90%

Flutter 资源热更新

  • 仅支持资源文件更新
  • 不能更新原生代码

五、错误日志收集

采用"本地缓存 + 批量上报"策略:

  • 异步处理,不阻塞主线程
  • 失败重试,确保日志不丢失
  • 智能节流,避免日志爆炸
  • gzip压缩,节省流量

六、简历描述模板

项目名称: 企业级应用稳定性监控平台

技术栈: Electron / React Native / Flutter + Node.js + MongoDB

核心职责:

  1. 设计并实现完整的崩溃监控系统,支持多种技术栈
  2. 建立崩溃率统计指标体系,崩溃率从 1.2% 降至 0.08%
  3. 开发增量更新机制,更新包体积减少 85%
  4. 实现错误日志自动收集和上报,问题响应时间缩短 70%
  5. 搭建可视化监控大盘,提供实时数据分析

技术亮点:

  1. 多层崩溃捕获,覆盖率达 99%
  2. 智能错误聚合,减少 90% 的噪音数据
  3. 增量更新优化,更新成功率从 78% 提升到 98%
  4. 性能影响 < 1%,用户无感知

项目成果:

  • 崩溃率从 1.2% 降至 0.08%
  • 崩溃恢复率提升到 85%
  • 增量更新节省带宽成本 60%
  • 问题平均修复时间从 3 天缩短到 8 小时

七、面试标准回答

Q1: 如何统计应用的崩溃率?

"我们采用 4 个核心指标:

第一个是崩溃率,公式是崩溃用户数除以活跃用户数。我们的目标是低于 0.1%,实际数据是 0.08%。

第二个是崩溃次数率,公式是崩溃次数除以启动次数。能反映崩溃的频率,目标是低于 0.05%。

第三个是无崩溃用户率,目标是大于 99.9%,目前是 99.92%。

第四个是无崩溃会话率,目标是大于 99.95%。

我们每小时统计一次,超过阈值就触发告警。还建立了崩溃分级制度,P0 级必须 2 小时内修复。"

Q2: Electron 如何监控崩溃?

"Electron 要分主进程和渲染进程监控:

主进程用 process.on('uncaughtException') 和 process.on('unhandledRejection') 捕获异常,用 app.on('render-process-gone') 监听渲染进程崩溃。

渲染进程用 window.onerror 捕获全局错误,window.onunhandledrejection 捕获 Promise 拒绝,React/Vue 中使用 ErrorBoundary 组件。

还用了 crashReporter 捕获原生崩溃。所有崩溃信息都会收集设备信息、堆栈、用户行为轨迹,然后上报到服务器。覆盖率达到 99%。"

Q3: React Native 如何实现热更新?

"我们用 CodePush,微软提供的成熟方案。

集成后用 CodePush.sync() 检查更新,支持三种安装模式:立即安装、下次启动安装、从后台回来时安装。

发布用 code-push release-react 命令,可以指定目标版本、是否强制更新。

我们的策略是:小 bug 用热更新,大功能更新发新版本。热更新覆盖率 90%,以前修复要 1-2 周,现在几小时就能推送。"

Q4: 如何实现增量更新?

"核心是二进制差分算法 bsdiff。

服务器端用 bsdiff 对比新旧版本,生成差分包。客户端下载差分包,用 bspatch 应用到当前版本,生成新版本。

完整包 120MB,差分包只有 15MB,节省 88% 流量。

还支持断点续传、版本回退。服务器会根据差异大小智能选择增量或全量更新。

实际效果:更新包减少 85%,成功率从 78% 提升到 98%,带宽成本节省 60%。"

Q5: 错误日志如何收集上报?

"我们采用'本地缓存 + 批量上报'策略。

错误信息先写入本地数据库,不直接上报。每 30 秒或累计 20 条时批量上报,减少网络请求。

日志用 gzip 压缩,减少 70% 流量。失败时重试,最多保留 7 天。

如果短时间内大量相同错误,只上报一次并记录次数,避免日志爆炸。

所有处理都在后台线程,不阻塞主线程。日志丢失率 < 0.01%,对性能影响 < 1%。"

八、深度追问应对

Q6: 如何自动分级崩溃?

"我们有自动化的崩溃分级系统,基于 4 个维度评分:

  1. 影响用户数 (权重 40%)
  2. 崩溃率 (权重 30%)
  3. 功能重要性 (权重 20%)
  4. 增长趋势 (权重 10%)

总分 >= 80 分是 P0,60-79 是 P1,40-59 是 P2,< 40 是 P3。

每 5 分钟重新计算一次。P0 级立即电话告警,P1 级发钉钉。

还有特殊规则:连续崩溃、数据丢失、支付相关崩溃自动标记为 P0。

自动分级准确率 92%,P0 平均响应时间 15 分钟。"

Q7: 混淆后的堆栈信息怎么还原?

"JavaScript 用 Source Map 还原:

  • 打包时生成 source map 文件
  • 上传到私有服务器,按版本保存
  • 服务器用 source-map 库解析还原
  • 替换文件名、行号、函数名

Flutter 用 symbols 文件:

  • 编译时生成 symbols 文件
  • 用 flutter symbolicate 工具还原

Android 用 ProGuard mapping:

  • 打包时生成 mapping.txt
  • 用 retrace 工具还原

iOS 用 dSYM 文件:

  • Xcode 打包时生成
  • 用 atos 或 symbolicatecrash 还原

构建时自动上传符号文件,崩溃时服务器自动还原。结果缓存,相同堆栈不重复处理。并发还原,支持每秒 1000+ 个崩溃。"

Q8: 如何保证监控系统的高可用?

"我们的监控系统本身也要高可用:

  1. 多地部署:3 个机房,任一机房故障不影响上报
  2. 降级策略:
    • 服务器不可用时,客户端本地缓存
    • 缓存满了,丢弃最老的日志
    • 服务恢复后自动同步
  3. 限流保护:
    • 客户端限流:每分钟最多 100 条
    • 服务端限流:根据 IP 和 UserID 限流
    • 防止恶意攻击和日志爆炸
  4. 异步处理:
    • 上报请求不阻塞主流程
    • 使用消息队列缓冲
    • 多线程并发处理
  5. 数据备份:
    • 所有日志双写(主库 + 备份库)
    • 每天自动备份到对象存储
    • 保留 90 天数据
  6. 监控告警:
    • 监控系统本身也被监控
    • 上报失败率、处理延迟等指标
    • 异常时自动告警

实际可用性 99.95%,平均延迟 < 100ms,从未丢失过重要崩溃数据。"