游戏卡顿白皮书 › L13 服务器架构与运维
服务器之间的时钟差 Clock skew between servers
原因 ID in-clock-skew · 主责 运维团队·系统运维 · 配合 研发团队·服务器开发
在含图示和实验的完整版中打开此卡片 →
每台服务器的时钟略有差异时,冷却、buff、活动开始的判定在不同服务器上就会对不上。
起因 时间同步停掉的服务器,时钟与其他服务器相差几百 ms 到几秒 → 结果 在服务器之间传递 buff 结束时刻这类绝对时间,判定就会对不上 → 画面表现 一移动 buff 就消失,或冷却又从头开始
- 症状
- 吞操作/回档
- 因素
- 延迟
- 谁会遇到
- 只有我
- 何时出现
- 移动中/切换地图时
- 负责方
- 主责 运维团队·系统运维 · 配合 研发团队·服务器开发
- 研发团队要做的事
- 服务器之间传递剩余时间,不传绝对时间。
- 运维团队要做的事
- 监控时间同步(NTP、chrony),设置服务器间时钟差告警。
- 数值参考
- 时间同步(NTP、chrony)正常时,同一数据中心的服务器之间通常在几 ms 以内。同步停掉,或虚拟机长时间停住后恢复,就会拉大到几百 ms 到几秒。
- 监控图上
- 缓慢爬升 · 各服务器的时钟偏移
- 查看位置
- 收集各服务器 chronyc tracking 的 System time(系统时钟与 NTP 时钟之差)、Last offset 和 Ref time(最后一次采用时间源测量值的时刻)并对比
- 确认依据
- 问题服务器的偏移比其他服务器大几百 ms 以上,或 Ref time 很久以前就停住了,而判定错乱只发生在进出这台服务器的移动中
- 排除依据
- 所有服务器的偏移都在几 ms 以内,则是游戏侧的时间计算,或客户端的时钟同步误差
- 确认手段
- 运维工具即可确认(无需游戏代码)
- 深入了解
- 单台服务器的时钟一下子向前或向后跳,看服务器操作系统层的“系统时钟跳变(NTP step)”。
出处
- RFC 5905: Network Time Protocol Version 4: Protocol and Algorithms Specification IETF
高速局域网上的 NTP 客户端通常能同步到几百 µs 以内 - chrony – Frequently Asked Questions chrony
普通计算机时钟的漂移低于 100 ppm,但虚拟机可能更大;挂起后恢复的虚拟机时间会偏差,可能需要 step 校正 - clock_gettime(2) — Linux manual page Linux man-pages
CLOCK_REALTIME 可能因手动修改或 NTP 校正而不连续地跳变,CLOCK_MONOTONIC 不受这类跳变影响 - chronyc(1) chrony
chronyc tracking 的 System time(NTP 时钟与系统时钟之差)、Last offset(最后一次校正时估算的偏移)、Ref time(最后一次采用时间源测量值的时刻)
相关原因
同一层:L13 服务器架构与运维
其他层中同样导致“吞操作/回档”的原因
查看含图示和实验的原卡片