游戏卡顿白皮书 › L7 服务器操作系统(内核)
CPU 窃取时间(虚拟机) CPU steal time
原因 ID so-steal · 主责 运维团队·系统运维 · 配合 外部·外部
在含图示和实验的完整版中打开此卡片 →
物理服务器(hypervisor)把虚拟机的 CPU 时间暂时让给其他虚拟机期间(CPU 窃取),游戏服务器会停住。
起因 同一宿主机上的其他虚拟机大量占用 CPU → 结果 本虚拟机每次失去几 ms 到几十 ms 的运行机会 → 画面表现 tick 耗时莫名飙升,表现为一卡一卡、卡住
- 症状
- 一卡一卡, 卡住
- 因素
- 停顿
- 谁会遇到
- 全服
- 何时出现
- 偶尔随机
- 负责方
- 主责 运维团队·系统运维 · 配合 外部·外部
- 运维团队要做的事
- 监控 steal 指标(top、vmstat 的 st);使用独占核心或专用宿主机;避开 CPU 积分耗尽就降速的突发型实例;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 服务器操作系统(内核)
其他层中同样导致“一卡一卡”的原因
查看含图示和实验的原卡片