한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

遊戲 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 配額)」
確認方式
用基礎設施工具確認(不需要遊戲程式碼)

出處

  1. proc_stat(5) — Linux manual page Linux man-pages
    steal:在虛擬化環境中,因其他作業系統執行而被搶走的時間
  2. Standard mode for burstable performance instances AWS
    突發型執行個體會消耗額度來超出基準效能,額度用完後 CPU 使用率就降回基準水準
  3. How EC2 instance stop and start works AWS
    執行個體停止後再啟動,大多會移到新的主機
  4. mpstat(1) — Linux manual page sysstat
    %steal:hypervisor 執行其他虛擬 CPU 時,這個虛擬 CPU 被迫等待的時間比例

相關原因

同一層:L7 伺服器 OS(kernel)

同一症狀(卡頓)在其他層的原因

查看含圖解與實驗的完整版卡片