转至:BOTManJL
指标
-
崩溃率:崩溃机器数/启动机器数,崩溃次数/启动次数
-
假死率/卡顿率:超过 10s/2s 不响应心跳消息(机器数,次数)
-
白屏率:页面区域持续 10s 白屏(机器数,次数)
-
主界面/首页 加载完成时间/CPU 时间
- Log -> 旭日图
- Trace -> 火焰图
-
主界面/首页 首屏绘制完成时间:用户感知加载总时间
-
用户触发启动 到 首次绘制完成时间:用户感知打开总时间
-
死锁问题:
- 检查线程等待链,查看是否成环
- 可能导致 假死/卡顿
-
泄漏问题:
- 内存泄露(
!heap
/UMDH/LeakDiag)/ 句柄泄露(!htrace
) - 通过 diff snapshot 排查,哪类资源 泄露 -> 何时/何地 泄露
- 内存泄露(
-
排查问题:
- 收集 Dump/Trace
- 下发云控
- 远程调试
维度
-
横向比较(竞品)+ 纵向比较(版本)
-
冷热启动:
- 由于物理内存会有 Standby List 缓存,
File I/O != Disk I/O
- 模拟冷启动:需要使用 RAMMap 清空 Standby List
- 由于物理内存会有 Standby List 缓存,
-
启动时间:启动量以周为周期变化,节假日启动少
-
启动方式:主动打开,默认打开方式,第三方调起
-
实验环境:实验室环境/用户机器环境
-
操作系统:版本/32-64位
-
硬件环境:CPU 个数/内存大小/是否 SSD
-
共存环境:安全软件影响
-
网吧环境:网管软件影响
-
网络环境:运营商劫持影响
-
打开 URL:根据 host 聚合
工具
- WinDbg:查看崩溃 Dump + 调试
- XPerf:查看细化的 Trace(基于 ETW 更底层)
- Visual Studio Diagnostic Tool:粗略分析 CPU/内存(最上层)
- Process Explorer:查看进程关系
- Process Monitor:查看进程活动情况(偏底层)
- RAMMap/VMMap:查看 系统/进程 内存分布
策略
-
启动快
-
核心思想:
- 能去掉就去掉
- 能优化就优化
- 都不能就预取
-
原生绘制:提升体验/收入(漏斗:提前关闭/流量劫持/加载错误)
-
延迟加载:优先完成首次绘制,其他功能往后放
-
代码预取:避免内存映射文件 分散/少量 读取导致频繁 Page Fault(尤其是冷启动工作集从无到有)
-
局部访问:
vector
相对于list
,一次性分配内存,访问时内存也更连续 -
指令重排:把启动时需要的 指令/数据 放在一起
- Profile Guided Optimization (PGO)
- 可能破坏局部性原则,Page Fault 导致小工作集抖动
驱动加速:通过驱动加载资源并锁定在内存中,避免启动时再次加载
-
智能预判:基于 AI 判断是否需要提前启动、打开网页
-
-
占用少
- 进程合并:多进程架构合并为多线程架构,需要架构上的支持
内存清理:空闲时 trim 工作集,回收物理内存智能休眠:基于 AI 判断是否需要关闭/回收页面内存
演进
by zifeng T3.3
- 工具时代:用户反馈 -> 远程联系 -> 手动定位
- 系统时代:自动监控 -> 后台系统 -> 自动分析
- AI 时代:采集数据 -> 训练模型 -> 行为预判