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

游戏卡顿白皮书 › L7 服务器操作系统(内核)

系统时钟跳变(NTP step) Wall-clock jump (NTP step)

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

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

服务器时钟一次性向前或向后调整几秒时,依赖系统时钟的定时器会一下子集中触发或停住。

起因 时间同步一次性大幅调整时钟 → 结果 定时器集中触发或停住,超时判定出错 → 画面表现 buff/冷却异常、集体掉线、快进

症状
快进, 掉线, 吞操作/回档
因素
停顿
谁会遇到
全服
何时出现
偶尔随机
负责方
主责 研发团队·服务器开发 · 配合 运维团队·系统运维
研发团队要做的事
经过时间、超时、冷却时间都用不会跳变或倒退的单调时钟(monotonic clock)计算,墙上时钟(wall clock)只用于显示和记录。
运维团队要做的事
时钟采用缓慢调整(chrony 的 makestep 只在刚启动时生效);监控时间同步状态(时钟偏差)。
数值参考
ntpd 在偏差超过 0.128 秒时一次性校准,偏差更小时缓慢校准,消除 1 秒偏差要 30 分钟出头。现在常用的 chrony 在推荐设置(makestep)下,只在启动后的前几次一次性校准,之后都缓慢校准。虚拟机短暂停住后恢复时,时钟也会跳变。
监控图上
偶发随机尖峰 · 定时器触发次数、断开次数,时钟调整记录
查看位置
在时间同步服务的日志里找一次性大幅调整时钟的记录,与出现异常的时刻对照。chrony 在调整幅度超过 logchange 设定值(默认 1 秒)时会写入 syslog
确认依据
出现 buff/冷却异常、集体掉线、快进的时刻有时钟调整记录,且调整幅度与异常的大小相近
排除依据
没有时钟调整记录则不是这个原因。虚拟机还要看停住后恢复的情况(“云宿主机维护/热迁移”)
确认手段
运维工具即可确认(无需游戏代码)

出处

  1. ntpd - Network Time Protocol (NTP) daemon Network Time Foundation
    偏差超过步进阈值 128 ms 时一次性校准,较小时缓慢校准;每秒校准 0.5 ms,校准 1 秒需要 2,000 秒(约 33 分钟)
  2. chrony – Frequently Asked Questions chrony
    推荐像 makestep 1 3 这样只在启动后的前几次允许步进;停住后恢复的虚拟机醒来时时间可能已经偏了
  3. clock_gettime(2) — Linux manual page Linux man-pages
    CLOCK_MONOTONIC 不受系统时钟不连续跳变的影响,也不会倒退
  4. chrony.conf(5) chrony
    logchange:时钟调整幅度超过这个值(默认 1 秒)时写入 syslog

相关原因

同一层:L7 服务器操作系统(内核)

其他层中同样导致“快进”的原因

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