[轉]性能分析筆記

轉至: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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章