如何计算两台Linux服务器及虚拟机之间的毫秒级时间差?
实现Linux服务器/虚拟机间的毫秒级时间差检测
1. 用date命令直接输出毫秒级时间
默认的date命令可通过格式化参数输出毫秒甚至纳秒级时间:
- 输出带毫秒的完整时间:
date +%Y-%m-%d\ %H:%M:%S.%3N - 输出秒+毫秒的时间戳:
date +%s%3N - 输出纳秒级时间戳(便于精确计算差值):
date +%s%N
如果要实时监控,别用默认的watch date(默认1秒刷新且仅到秒级),可以指定更高刷新频率并带上毫秒格式:
watch -n 0.1 'date +%Y-%m-%d\ %H:%M:%S.%3N'
-n 0.1表示每0.1秒刷新一次,能清晰看到毫秒的动态变化。
2. 跨机器时间差对比脚本
要精确计算两台机器的时间差,建议在两台机器上同时运行以下脚本采集时间戳,再离线对比:
#!/bin/bash # 持续输出纳秒时间戳和主机名,每50毫秒采集一次 while true; do echo "$(date +%s%N) $(hostname)" sleep 0.05 done
将两台机器的输出保存到文件后,找到时间接近的记录,把纳秒差值除以1000000即可得到毫秒级时间差。
3. 借助时间同步工具查看偏差
如果机器使用chrony做时间同步,直接用chronyc tracking查看本地时间与同步源的偏差:
chronyc tracking
输出中的System time字段会显示当前系统时间与NTP源的偏差,格式类似System time : 0.002345 seconds slow of NTP time,精确到微秒,换算后就是毫秒级偏差。
如果用的是ntp服务,可使用ntpdate -q查询与NTP服务器的时间差:
ntpdate -q pool.ntp.org
输出中的offset字段即为时间偏差,比如offset -0.001234 sec表示本地时间比服务器慢1.234毫秒。
注意事项
- 远程执行命令时要考虑SSH网络延迟的影响,尽量在本地机器上独立采集时间数据。
- 若需要长期监控时间同步状态,建议配置
chrony或ntpd服务保持机器间的时间同步,偏差通常能控制在毫秒级以内。
内容的提问来源于stack exchange,提问作者Aniket
相关产品推荐
相关产品推荐

