游戏卡顿白皮书 › L9 服务器游戏进程
定时器集中触发 Synchronized timers
原因 ID sp-timer-burst · 主责 研发团队·服务器开发
在含图示和实验的完整版中打开此卡片 →
所有怪物刷新、所有 buff 到期、整点奖励都挤在同一个 tick 时,那个 tick 的负载就会高出几十倍。
起因 刷新、到期、奖励、自动存盘的定时器对齐到了同一时刻 → 结果 那一个 tick 的工作量是平时的几十倍 → 画面表现 每到固定时刻就顿一下
- 症状
- 卡住, 一卡一卡
- 因素
- 停顿
- 谁会遇到
- 特定地点/分线, 全服
- 何时出现
- 固定周期
- 负责方
- 主责 研发团队·服务器开发
- 研发团队要做的事
- 把定时器时刻随机错开一点;分到多个 tick 处理。
- 监控图上
- 周期性尖峰 · 服务器 tick 耗时
- 查看位置
- 收集 tick 耗时冲高的各个时刻,看间隔(整点、每 5 分钟等)。与在同一时刻运行的刷新、buff 到期、奖励、自动存盘定时器列表对照
- 确认依据
- tick 每次都在同一时刻或以相同间隔冲高,且那个时刻有集中触发的游戏定时任务
- 排除依据
- 有周期,但与 GC 日志中的停顿时刻或服务器的 cron、备份时刻重合,看“服务器 GC 全局停顿”“定时任务”
- 确认手段
- 需要游戏服务器/客户端的日志和指标
出处
- Timeouts, retries, and backoff with jitter AWS
Amazon Builders' Library。给所有定时器、周期任务、延迟任务加上随机抖动(jitter),打散集中在同一时刻的负载;多台服务器每分钟一次的请求都挤在每分钟最初几秒的案例
相关原因
同一层:L9 服务器游戏进程
其他层中同样导致“卡住”的原因
查看含图示和实验的原卡片