是什么导致时钟跳5分钟?


8

我有一个(物理的)盒子,运行着精简的Ubuntu。时不时地(3个月内6次),时钟向后跳正好300秒(+-0.01秒;始终正好300秒)。从一分钟到下一分钟(我有一台外部计算机每分钟轮询一次)。

机器正在运行2.6.26-generic(自定义编译内核),Ubuntu 9.04(我知道,我正在尝试对其进行更新,但它是半嵌入式的)。日志中没有任何内容指示发生了什么,我可以选择很多pool.ntp.org ntp服务器,这些服务器可以在一段时间后解决问题。

有谁知道这可能是什么原因?

附加1:

我也有许多其他的机器运行相同的内核(二进制相同),以及相同软件的细微变化,而这些都没有这个问题。我也换了硬件。

附加2(我的个人评论摘要):

  • 我知道9.04已过时,我同意应对其进行更新,并且此决定超出了我的控制范围。因为管理。
  • 我尝试了大量的ntp服务器,也有少数。在两种情况下仍然会发生这种情况。如果我有大量的ntp服务器,则它可以更快地自我修复。
  • 我已经换了硬件
  • 我在另一个盒子(具有相同的硬件)上使用了相同的内核/操作系统,但未显示问题。
  • 重新启动没有帮助。(这个问题已经持续了大约6个月)
  • 正常运行时间约为3个月。该框“始终打开”,运行PBX(星号)。
  • 现在,hwclock与软件时钟完全匹配-0.000000秒
  • 我无法找到任何读取硬件时钟的cron作业。
  • 没有与负载有关的模式(尽管负载仍然很低)。
  • 它发生在白天和黑夜。
  • 它不会定期发生。在过去三个月中,有一半发生在最近9天中。
  • 这不是“漂移”-99%的时间是在一秒钟的一小部分之内,然后从一分钟到下一分钟,它向后跳了300秒。因此,一分钟它可能会说是3:07:03,将我的另一台计算机匹配到1微秒内,即60秒后,它说是3:04:03。
  • 我在日志中什么也找不到。

1
Ubuntu 9.04已经寿终正寝了,如果您还运行自定义内核,那么最多只能提供有限的支持。半嵌入式系统增加了另一层复杂性。
Panther

1
嘿,如果这是一个简单的问题,我现在已经解决了:)
AMADANON Inc. 2014年

尝试将您的ntp服务器数量减少为3个,使用地理位置优越且连接良好的服务器。
Panther

好主意-我已经尝试过了。唯一的区别是,使用更少的ntp源,ntpd进行的查询更少,并且恢复正常所需的时间更长。
AMADANON Inc. 2014年

嗯,不是ntp,而是通过消除过程来保留自定义内核或硬件。
Panther

Answers:


1

这听起来像是实时时钟(RTC)出现故障。如果这是备用硬件,则可以通过运行其他操作系统(例如,引导实时Linux CD或PXE引导)来确认问题,并查看是否可以复制故障。如果在另一个操作系统上发生了完全相同的时间偏差,则您已确认问题是硬件故障。

假设它是RTC,则可以按照严重性顺序尝试以下解决方案。

  • 更换CMOS电池。您可以通过用万用表测试旧电池的电压来尝试确认它是否为故障电池。
  • 更改RTC。如果您很幸运并且有一块漂亮的主板,则可能有两个RTC。默认情况下使用高精度时钟和标准RTC。检查BIOS / EFI设置,看看是否可以更改为备用RTC,以避免使用有问题的RTC。
  • 尝试更换RTC。根据主板的年龄,RTC可能是金属罐或板上的芯片。如果您有一些电子技术,可以尝试自己更换该组件。
  • 更换主板,因为RTC或与RTC接口的某些电子组件或导线出现故障。

1

您可以在该框上运行一个脚本,以跟踪正在运行的进程并同时监视时钟。如果时钟突然跳回,它将记录当时活动的进程列表。也许这暗示了哪个进程改变了时钟。

当然,这假设您有软件问题。如果只是硬件出现故障,您将不会以这种方式找到任何东西。

/bin/bash

oldTime=$(date +%s)
oldPsOutput=$(ps faux)
while sleep 1
do
  currentTime=$(date +%s)
  currentPsOutput=$(ps faux)
  if [ "$currentTime" -lt "$oldTime" ]  # clock change detected?
  then
    echo '========='
    echo "$currentTime < $oldTime"
    echo "$oldPsOutput"
    echo ':::::::::'
    echo "$currentPsOutput"
  fi >> /tmp/clockChangeDetector.log
  oldPsOutput=$currentPsOutput
  oldTime=$currentTime
done

0

Michael Yasumoto的答案似乎涵盖了所有基础-我同意您可能正在寻找怪异的硬件-但这是一个实用的想法:使用具有良好内部连接性的可靠机器,该机器具有很少的周期可以节省运行时间NTP服务器,然后“尽一切可能 ”使运行在嵌入式PBX盒上的NTP客户端向该本地NTP服务器发送垃圾邮件,以尽可能频繁地请求时间(例如,每30秒)。

然后,当盒子最终被升级时,适当地将其放在一边,并找出At Some Point(TM)出了什么问题。:P

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.