一次虚拟机时钟漂移的排查记录
现象很零散:一部分请求偶发 401,日志里同一请求的时间戳比上游早了 300 ms,重启服务后好一阵又复发。三个现象指向同一个怀疑对象——时钟。
先排除 NTP 配置。timesyncd 显示同步正常,偏移在几十微秒。但那是采样瞬间的值。把 chronyc tracking 连续看了五分钟,才发现 offset 在 0 到 0.4 秒之间来回跳,而且跳变和宿主的 CPU steal 峰值高度相关。
虚拟机的时钟来自宿主,当 vCPU 被超卖、线程被调度出去的时间过长,客户机的 TSC 就会累计误差。这不是配置问题,是资源问题。缓解办法是启用更频繁的时钟同步,并把对时间敏感的服务(证书校验、令牌签发)的错误容忍窗口放宽。
最后的处理是三条:把同步间隔从 34 秒缩短到 8 秒,给这类机器加上时钟偏移的监控指标,以及在应用层对时间比较留 500 ms 的宽容度。都不是根治,但足以让故障从每周几次降到零。