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

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

消息队列积压 Mailbox / job queue backlog

原因 ID sp-queue · 主责 研发团队·服务器开发

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

请求进来的速度超过处理速度、在队列里堆积时,排在后面的请求要过几秒才被处理,或者被丢弃。

起因 请求到达的速度超过处理速度 → 结果 队列越来越长,超过上限就丢弃 → 画面表现 技能、交易反应慢或被吞

症状
操作延迟, 吞操作/回档
因素
延迟, 丢包
谁会遇到
特定地点/分线, 仅特定功能
何时出现
人多的时候
负责方
主责 研发团队·服务器开发
研发团队要做的事
监控队列长度;采用优先丢弃过时请求的策略;并行处理。
监控图上
触顶后走平 · 队列长度、最旧消息的滞留时长,每秒处理数
查看位置
服务器记录的各队列长度、最旧消息的滞留时长、每秒进入数、处理数、丢弃数。没有代码指标时,用 ss(或 netstat)看游戏 socket 的 Recv-Q(内核已收下但进程尚未读取的量)
确认依据
进入数超过处理数期间,处理数停在某个值上不再上升,队列长度、滞留时长和丢弃数持续增加
排除依据
队列很短、滞留时长也短,反应却慢,看线路延迟或 tick 本身的延迟
确认手段
需要游戏服务器/客户端的日志和指标
真实案例
CCP Games 2014: EVE Online HED-GP 大规模舰队战中的服务器过载

出处

  1. Avoiding insurmountable queue backlogs AWS
    Amazon Builders' Library。用排队消息的滞留时长监控积压;实时系统先处理新数据(接近 LIFO),旧消息有时直接丢弃
  2. Site Reliability Engineering, Chapter 22: Addressing Cascading Failures Google
    请求比处理速度快时队列填满、延迟增加;用 LIFO 或 CoDel 代替 FIFO,去掉已经没用的旧请求
  3. ss(8) — Linux manual page iproute2
    显示 socket 统计的工具(信息与 netstat 类似),-p 显示使用 socket 的进程
  4. netstat(8) — Linux manual page net-tools
    Recv-Q:已连接 socket 中用户程序尚未取走的字节数

相关原因

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

其他层中同样导致“操作延迟”的原因

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