轉至: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 時代:採集數據 -> 訓練模型 -> 行爲預判