[转]性能分析笔记

转至: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
  • 启动时间:启动量以周为周期变化,节假日启动少

  • 启动方式:主动打开,默认打开方式,第三方调起

  • 实验环境:实验室环境/用户机器环境

  • 操作系统:版本/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 时代:采集数据 -> 训练模型 -> 行为预判
发布了7 篇原创文章 · 获赞 7 · 访问量 2万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章