*注意:如果您的服务器由于内核混乱而仍然存在问题,并且您无法重新启动 - 建议在您的系统上安装 gnu date 的最简单解决方案是:date -s now。这将重置内核的内部“time_was_set”变量并修复 Java 和其他用户空间工具中的 CPU 占用 futex 循环。我已经在我自己的系统上跟踪了这个命令,并确认它正在做它在锡上所说的 *
尸检
Anticlimax:唯一死掉的是我的 VPN (openvpn) 链接到集群,所以在它重新建立时有令人兴奋的几秒钟。其他一切都很好,并且在闰秒过去后启动 ntp 就顺利进行了。
我在http://blog.fastmail.fm/2012/07/03/a-story-of-leaping-seconds/写下了我当天的全部经历
如果您在http://my.opera.com/marcomarongiu/blog/2012/06/01/an-humble-attempt-to-work-around-the-leap-second查看 Marco 的博客- 他有一个解决方案使用 ntpd -x 在 24 小时内调整时间变化以避免 1 秒跳过。这是运行您自己的 ntp 基础架构的另一种涂抹方法。
就在今天,2012 年 6 月 30 日星期六 - 在格林威治标准时间开始后不久开始。我们在由不同团队管理的不同数据中心的少数服务器都变黑了 - 不响应 ping,屏幕空白。
他们都在运行 Debian Squeeze - 从库存内核到自定义 3.2.21 构建的所有内容。大多数是戴尔 M610 刀片,但我也刚刚丢失了戴尔 R510,其他部门也丢失了其他供应商的机器。还有一个旧的 IBM x3550 崩溃了,我认为它可能无关紧要,但现在我想知道。
我确实从中获得了屏幕转储的一次崩溃说:
[3161000.864001] BUG: spinlock lockup on CPU#1, ntpd/3358
[3161000.864001] lock: ffff88083fc0d740, .magic: dead4ead, .owner: imapd/24737, .owner_cpu: …
Run Code Online (Sandbox Code Playgroud) 2015 年 6 月 30 日 23:59:60 UTC 将出现闰秒。
我有一个基于 Linux 的第 1 层 NTP 服务器,它使用 GPS 作为参考时钟。服务器正在使用“默认” ntp.org ntpd
。
我应该如何为闰秒做准备以确保在闰秒时和之后有正确的时间可用?
ntpd
服务器会正确运行吗?
如果不确定,有没有办法事先测试?
我想将 Unix 系统配置为在国际原子时(TAI) 上运行,以便能够看到正确报告为 2016-12-31 23:59:60 的年终闰秒。我知道这会导致系统的时间戳与 POSIX 的时间戳不兼容,但我这样做是作为一个实验。我已经从复制的时区文件/usr/share/zoneinfo/right/
来/etc/localtime
。这些是我的问题。
zoneinfo/right
时区的文件需要更新?我发现在最新的闰秒插入(2016-12-31 23:59:60)之后,我们的 CentOS7 应用程序的工作线程在作业之间休眠 1 秒,开始立即唤醒休眠线程,而不是在一秒钟内。一般来说,所有睡眠都比预期的唤醒时间提前 1 秒醒来。
最简单有效的解决方案是重新启动盒子。但这在我们的案例中是不可取的。有没有办法在不重新启动的情况下解决这个问题?
附注。作为参考,这里有一个简单的 C++ 程序可以重现该问题。
#include <boost/date_time.hpp>
#include <boost/thread.hpp>
#include <iostream>
using namespace std;
// this has to be run in a thread to be able to detect the issue
void check_thread()
{
size_t expected_delay = 1000;
cout << "Expected delay: " << expected_delay << " ms" << endl;
boost::posix_time::ptime t1 = boost::posix_time::microsec_clock::universal_time();
boost::this_thread::sleep(boost::posix_time::milliseconds(1000));
boost::posix_time::ptime t2 = boost::posix_time::microsec_clock::universal_time();
size_t actual_delay = (t2 - t1).total_milliseconds();
cout << "Actual delay: " << actual_delay << " …
Run Code Online (Sandbox Code Playgroud)