AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 449226
Accepted
David Wolever
David Wolever
Asked: 2012-11-16 14:51:16 +0800 CST2012-11-16 14:51:16 +0800 CST 2012-11-16 14:51:16 +0800 CST

强制 ntpd 以更小的步骤进行更改

  • 772

NTP 文档说:

在一般情况下,ntpd 以小步长调整时钟,以便时间刻度有效连续且没有间断 - http://doc.ntp.org/4.1.0/ntpd.htm

然而,这根本不是我在实践中注意到的。如果我手动将系统时间向后或向前更改 5 或 10 秒然后开始ntpd,我注意到它会一次性调整时钟。

例如,使用此代码:

#!/usr/bin/env python
import time
last = time.time()
while True:
    time.sleep(1)
    print time.time() - last
    last = time.time()

当我第一次更改时间时,我会注意到类似以下内容:

1.00194311142
8.29711604118
1.0010509491

然后,当我启动 NTPd 时,我会看到如下内容:

1.00194311142
-8.117301941
1.0010509491

有没有办法强制ntpd以更小的步骤进行调整?

linux
  • 2 2 个回答
  • 6905 Views

2 个回答

  • Voted
  1. Best Answer
    Jeff Ferland
    2012-11-16T14:58:44+08:002012-11-16T14:58:44+08:00

    启动守护程序时通过ntpd -x将保持非常小的变化:不会有时钟步进。当然,设置回转仅意味着如果您的时钟与正确时间相差很远,则可能需要一段时间来纠正较大的差距。引用手册页中的几段

    在一般情况下,ntpd 以小步长调整时钟,使时间刻度有效连续且没有间断。在极端网络拥塞的情况下,往返延迟抖动可能超过三秒,等于往返延迟的二分之一加上错误预算项的同步距离会变得非常大。ntpd 算法丢弃超过 128 ms 的样本偏移,除非没有样本偏移小于 128 ms 的时间间隔超过 900s。此后的第一个样本,无论偏移量如何,都会将时钟步进到指定时间。在实践中,这将时钟错误步进的误报率降低到极低的发生率。

    由于您将时钟调整了 10 秒,您肯定超出了 NTP 期望看到的范围,因此步进。

    作为这种行为的结果,一旦设置了时钟,它很少会偏离超过 128 毫秒,即使在网络路径拥塞和抖动的极端情况下也是如此。有时,特别是首次启动 ntpd 时,错误可能会超过 128 毫秒。如果本地时钟时间相对于服务器的未来时间超过 128 秒,这有时可能会导致时钟向后设置。在某些应用程序中,这种行为可能是不可接受的。如果命令行中包含 -x 选项,则时钟永远不会步进,只会使用转换校正。

    在决定使用 -x 选项之前,应仔细研究这些问题。由于 NTP 协议和算法设计所基于的正确性原则,可能的最大转换率被限制为百万分之 500 (PPM)。因此,本地时钟可能需要很长时间才能收敛到可接受的偏移量,大约每秒 2,000 秒时钟超出可接受的范围。在此间隔期间,本地时钟将与任何其他网络时钟不一致,系统不能用于需要正确同步网络时间的分布式应用程序。

    在开始主要服务之前运行ntpdate然后在之后运行ntpd -x可能是一个很好的组合解决方案,以确保在需要无级计时之前发生任何主要步骤。

    • 8
  2. phillmv
    2012-11-16T15:04:12+08:002012-11-16T15:04:12+08:00

    如果这是您要编写的代码,这可能是您正在寻找的答案:https ://stackoverflow.com/questions/1205722/how-do-i-get-monotonic-time-durations-in-python

    • 3

相关问题

  • Linux 主机到主机迁移

  • 如何在 Linux 机器上找到有关硬件的详细信息?

  • 如何在 Linux 下监控每个进程的网络 I/O 使用情况?

  • 在 RHEL4 上修改 CUPS 中的现有打印机设置

  • 为本地网络中的名称解析添加自定义 dns 条目

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve