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

游戏卡顿白皮书 › 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)”。

出处

  1. RFC 5905: Network Time Protocol Version 4: Protocol and Algorithms Specification IETF
    高速局域网上的 NTP 客户端通常能同步到几百 µs 以内
  2. chrony – Frequently Asked Questions chrony
    普通计算机时钟的漂移低于 100 ppm,但虚拟机可能更大;挂起后恢复的虚拟机时间会偏差,可能需要 step 校正
  3. clock_gettime(2) — Linux manual page Linux man-pages
    CLOCK_REALTIME 可能因手动修改或 NTP 校正而不连续地跳变,CLOCK_MONOTONIC 不受这类跳变影响
  4. chronyc(1) chrony
    chronyc tracking 的 System time(NTP 时钟与系统时钟之差)、Last offset(最后一次校正时估算的偏移)、Ref time(最后一次采用时间源测量值的时刻)

相关原因

同一层:L13 服务器架构与运维

其他层中同样导致“吞操作/回档”的原因

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