CentOS 时间跳跃数秒——有时

Posted

技术标签:

【中文标题】CentOS 时间跳跃数秒——有时【英文标题】:CentOS time jumps by multiple seconds — sometimes 【发布时间】:2013-10-15 08:41:24 【问题描述】:

在服务器 CentOS 5(32 位)上运行此 shell 脚本时,我得到奇怪的时间输出。 它是专用服务器,而不是 VPS。

时间.sh

#!/bin/bash    
for i in 1..10
do
NOW=$(date +"%M:%S")
echo "$i $NOW"
done

结果是:

1 05:27    
2 05:09
3 05:09
4 05:09
5 05:27
6 05:09
7 05:27
8 05:09
9 05:27
10 05:09

您会看到一些迭代的时间跳跃。 不知道是什么问题。

我在另一台服务器上运行脚本。结果还可以。

1 52:58
2 52:58    
3 52:58
4 52:58
5 52:58
6 52:58
7 52:58
8 52:58
9 52:58
10 52:58

【问题讨论】:

我猜第一个服务器是一个有严重时钟问题的虚拟服务器。 不太可能,但尝试将循环增加到 1000。如果最终有任何变化,您就知道第二台服务器非常快! 你有关于 dmesg 中时钟的输出吗? dmesg | grep -i "\(clock\|timer\)" 很可能是 KVM 或 Zen “专用”服务器。我建议将运行 lsmod 的结果发布为“virtio”列表,这表明时间正在漂移的虚拟客户。 微秒与此无关,不应在问题中提及.. 【参考方案1】:

这是在 CentOS 论坛上提出的 CentOS 5.X 问题。以下是一些细节的讨论之一:https://www.centos.org/forums/viewtopic.php?t=14610

您看到的错误很可能是在操作系统中,而不是在您的脚本中。如果可行,我建议尝试更新版本的 CentOS 或不同风格的 Linux。

【讨论】:

【参考方案2】:

我以前见过这样的行为,当时有多个 ntpd 进程正在运行,其中一个进程不知何故开始漂移。

检查 pidof ntpd 的输出并确认只列出了一个 pid。如果有多个,将它们全部杀死并重新启动 ntpd。

if (( $( pidof ntpd | wc -w ) != 1 )); then
  echo "Woah there - found multiple ntpd processes..."
  sudo killall ntpd
  sudo /etc/init.d/ntpd start
fi

【讨论】:

【参考方案3】:

我无法在我的 centos 7 上复制这个。所以我只能提供一个参考测量值,使用其他软件运行相同的脚本。

$ ./testclock.sh 
1 11:36
2 11:36
3 11:36
4 11:36
5 11:36
6 11:36
7 11:36
8 11:36
9 11:36
10 11:36

在这种情况下缺乏信息。 bash 脚本本身不包含我可以看到的任何明显错误。因此,这个问题很可能是一个外部问题。您需要务实地处理这个问题,并将问题分解为组成部分。

然后您需要开始找出抖动的机器和提供正确结果的机器之间的执行差异。这方面的例子是;

机器上的软件安装是否不同?运行“rpm -qa”并比较列表和版本。如果它们确实不同,请检查这些特定软件以及介于两者之间的每个软件版本的更改列表和错误报告。检查所有软件,但从您知道与“日期”直接相关的二进制文件和库开始。 硬件是否不同?以什么方式?这会影响时间测量吗? 时间测量是基于本地硬件还是网络服务?如果联网,是否所有池成员都设置为同一时间?两台服务器是否使用相同的池? ntpd 和 ntpdate 都可以用来设置时间。 Ntpd 通常会进行增量时间更正,而 ntpdate 会立即设置更正的时间。由于脚本运行速度如此之快,这不太可能是原因,但它仍应在检查列表中。 如果在软件方面、网络方面和硬件方面都是重复的,那么它可能是硬件问题。当然,建议重新启动以删除一次性事件,即使在 linux 发行版上也是如此。

【讨论】:

以上是关于CentOS 时间跳跃数秒——有时的主要内容,如果未能解决你的问题,请参考以下文章

以小数秒将excel时间导入熊猫

跳跃表原理和实现

Webkit CSS 动画跳跃问题

我需要哪个版本的 Hive 在小数秒内具有超过 6 个小数位的时间戳?

持久 TCP 连接、长时间超时和 IP 跳跃移动设备

如何在 Swift 中解析/创建格式为小数秒 UTC 时区(ISO 8601、RFC 3339)的日期时间戳?