服务器时间漂移会导致证书校验失败、日志顺序混乱、分布式锁异常、Kerberos 认证失败,甚至影响数据库复制和集群选举。处理时既要恢复准确时间,也要避免突然跳时给业务造成二次故障。
一、确认系统时间与时区
date -Ins
timedatectl status
hwclock --show记录当前时区、NTP 状态、系统时钟与硬件时钟。跨多台服务器对比时统一使用 UTC 或带时区的 ISO 时间,避免把时区差异误判为时钟漂移。
二、检查 chrony 同步状态
chronyc tracking
chronyc sources -v
chronyc sourcestats -v
chronyc activity重点关注:
Reference ID 和 Stratum 是否合理;
System time 的剩余偏差;
Last offset、RMS offset 和 Skew;
源状态是否为
*、+、?或x;是否所有时间源都不可达。
若使用 systemd-timesyncd:
timedatectl timesync-status
journalctl -u systemd-timesyncd --since '-30 min' --no-pager不要同时运行多个 NTP 客户端,让 chronyd、ntpd 和 systemd-timesyncd 互相调整时钟。
三、检查网络、DNS 和防火墙
NTP 通常使用 UDP 123:
getent hosts <ntp-server>
chronyc sources -v
ss -uapn | grep ':123'确认出口 ACL、安全组、防火墙和企业 NTP 服务可达。不要只用 ping 判断,ICMP 可达不代表 UDP 123 正常。
四、检查服务和配置
systemctl status chronyd --no-pager
journalctl -u chronyd --since '-1 hour' --no-pager
chronyd -pchronyd -p 可打印解析后的配置,适合检查语法和 include 文件。关注 server/pool、makestep、rtcsync、bindaddress 和访问控制。
五、虚拟机与宿主机时间问题
systemd-detect-virt
dmesg -T | grep -Ei 'clocksource|timekeeping|tsc'
cat /sys/devices/system/clocksource/clocksource0/current_clocksource虚拟机暂停、快照恢复、热迁移或宿主机过载都可能造成时间跳变。检查云平台事件和虚拟化工具是否也在同步时间,避免与 chrony 重复校时。
六、安全恢复时间
偏差较小时,chrony 通常通过 slew 逐渐修正,业务感知较小。偏差很大时,可以先增加测量样本:
chronyc burst 4/4
chronyc tracking强制跳时命令:
chronyc makestepmakestep 会让系统时钟立即跳变。数据库、消息队列、分布式锁、定时任务和审计系统可能受到影响,生产环境执行前必须评估业务、暂停敏感任务并记录变更时间。
七、恢复后的验证
chronyc waitsync 60 0.01
chronyc tracking
chronyc sources -v
timedatectl status从多台机器对比日志时间,验证证书、认证、集群和监控是否恢复。不要只看到 System clock synchronized: yes 就结束排查,还要确认偏差和时间源质量。
八、长期治理
使用至少 3 个可靠时间源,避免单点和错误源。
监控 offset、stratum、source reachability 和同步状态。
云环境使用平台推荐的本地时间服务,并保留公共或企业备用源。
将时钟偏差检查加入证书、数据库、Kubernetes 和身份认证故障流程。
快照恢复、虚拟机迁移和长时间暂停后自动检查时间。
时间故障的处理原则是:先测量偏差,再决定渐进校正还是跳时,绝不能在不了解业务影响时直接修改系统时间。