遊戲 Lag 白皮書 › L7 伺服器 OS(kernel)
CPU steal(虛擬機器) CPU steal time
原因 ID so-steal · 主要負責 基礎設施團隊(伺服器基礎設施) · 協同 外部(外部)
在含圖解與實驗的完整版中開啟卡片 →
實體伺服器(hypervisor)把虛擬機器的 CPU 時間暫時讓給其他虛擬機器(CPU steal)時,遊戲伺服器會停住。
為什麼 同一台主機上的其他虛擬機器大量使用 CPU → 於是 自己的虛擬機器每次失去數 ms~數十 ms 的執行機會 → 畫面上 tick 時間莫名暴增,出現卡頓、定格
- 症狀
- 卡頓, 定格
- 因素
- 停滯
- 誰會遇到
- 整個伺服器
- 何時
- 偶爾隨機發生
- 負責單位
- 主要負責 基礎設施團隊(伺服器基礎設施) · 協同 外部(外部)
- 基礎設施團隊要做的事
- 監控 steal 指標(top、vmstat 的 st);使用專用核心或專用主機;避免 CPU 額度用完就變慢的突發型(burstable)執行個體;steal 持續偏高的執行個體先停止再啟動,移到其他主機。
- 外部要做的事
- 向雲端供應商回報 steal 持續偏高的主機。
- 圖表上
- 偶爾隨機飆高 · %steal、伺服器 tick 時間
- 查看位置
- 把 mpstat -P ALL 1 的 %steal 和伺服器 tick 時間放在同一條時間軸上看
- 符合的跡象
- tick 飆高的時間點 %steal 也一起飆高,停止再啟動移到其他主機後就減少
- 不符合的跡象
- %steal 接近 0 但 tick 仍飆高時,是遊戲伺服器內部的原因(「伺服器 GC 全面暫停」、「鎖競爭」)。在容器上時是「容器 CPU 節流(CFS 配額)」
- 確認方式
- 用基礎設施工具確認(不需要遊戲程式碼)
出處
- proc_stat(5) — Linux manual page Linux man-pages
steal:在虛擬化環境中,因其他作業系統執行而被搶走的時間 - Standard mode for burstable performance instances AWS
突發型執行個體會消耗額度來超出基準效能,額度用完後 CPU 使用率就降回基準水準 - How EC2 instance stop and start works AWS
執行個體停止後再啟動,大多會移到新的主機 - mpstat(1) — Linux manual page sysstat
%steal:hypervisor 執行其他虛擬 CPU 時,這個虛擬 CPU 被迫等待的時間比例
相關原因
同一層:L7 伺服器 OS(kernel)
同一症狀(卡頓)在其他層的原因
查看含圖解與實驗的完整版卡片