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

游戏卡顿白皮书 › L9 服务器游戏进程

单线程区域过载(热点) Single-threaded hot zone

原因 ID sp-hotzone · 主责 研发团队·服务器开发 · 配合 运维团队·系统运维

在含图示和实验的完整版中打开此卡片 →

每个区域由一个线程负责的架构下,人一旦聚到一处,只有那一个核心会跑到 100%。

起因 一个线程负责一个区域(分线) → 结果 人聚到一处时只有那个核心饱和,其余核心还有余量 → 画面表现 只有那个区域卡顿,其他区域正常

症状
慢动作, 操作延迟
因素
停顿
谁会遇到
特定地点/分线
何时出现
人多的时候
负责方
主责 研发团队·服务器开发 · 配合 运维团队·系统运维
研发团队要做的事
分散到多条分线;区域内部并行化;人数上限。
运维团队要做的事
把各核心 CPU 使用率加入监控和告警(整台服务器的平均值会把单个核心的饱和掩盖掉)。
数值参考
16 核服务器上即使有一个核心 100%,整台服务器的 CPU 使用率看起来也只有约 6%。要看各核心的使用率才能发现。
监控图上
随人数/负载上升 · 各核心 CPU 使用率、各线程 CPU
查看位置
用 mpstat -P ALL 1 看各核心使用率,用 pidstat -t 1 看游戏进程各线程的 CPU,与最忙线程所负责场景的人数对比
确认依据
整台服务器 CPU 不高,只有一个线程(一个核心)贴近 100%,且那时这个线程负责的场景里人很多
排除依据
多个核心都均匀偏高,是整台服务器过载。只有一个核心的 %soft(接收处理)高,看“网卡中断集中在单个核心”
确认手段
运维工具即可确认(无需游戏代码)
深入了解
“其他区域正常”只适用于每个区域单独跑 tick 的情况。如果多个区域线程每个 tick 都要互相等待、再一起进入下一个 tick,最忙的那个区域就会拖慢整台服务器的 tick。
真实案例
CCP Games 2014: EVE Online HED-GP 大规模舰队战中的服务器过载

出处

  1. Time Dilation – How’s That Going? CCP Games
    EVE Online 的 Time Dilation 以节点为单位,同一节点上远处的星系也会一起变慢;大战在只放 4 个星系的强化节点上处理
  2. mpstat(1) — Linux manual page sysstat
    分别显示每个处理器的使用率和整体平均值(-P ALL),%soft 是处理软中断所用的时间比例
  3. pidstat(1) — Linux manual page sysstat
    -t 同时显示进程下各线程的统计(CPU 使用率等)

相关原因

同一层:L9 服务器游戏进程

其他层中同样导致“慢动作”的原因

查看含图示和实验的原卡片