加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux – 如何在不重启的情况下修复闰秒睡眠问题

发布时间:2020-12-14 03:00:49 所属栏目:Linux 来源:网络整理
导读:我发现在最新的闰秒插入后(2016-12-31 23:59:60),我们的CentOS7应用程序让工作线程在作业之间休眠1秒钟,开始立即唤醒睡眠线程而不是一秒钟. 通常,所有睡眠都在预期唤醒时间之前1秒唤醒. 最简单和有效的解决方案是重启盒子.但在我们的案例中,这是不可取的. 有
我发现在最新的闰秒插入后(2016-12-31 23:59:60),我们的CentOS7应用程序让工作线程在作业之间休眠1秒钟,开始立即唤醒睡眠线程而不是一秒钟.
通常,所有睡眠都在预期唤醒时间之前1秒唤醒.

最简单和有效的解决方案是重启盒子.但在我们的案例中,这是不可取的.
有没有办法解决这个问题而无需重启?

PS.作为参考,这是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 << " ms" << endl;
    if (abs(expected_delay - actual_delay) > 900) {
        cout << "Too big delay difference: " << (expected_delay - actual_delay) << endl;
        cout << "Possible leap second issue" << endl;
    }
    else {
        cout << "No issues found" << endl;
    }
}

int main()
{
    boost::thread_group g;
    g.create_thread(check_thread);
    g.join_all();
    return 0;
}

建造:

g++ sleep_test.cpp -Wl,-Bstatic -lboost_thread -lboost_system -lboost_date_time -Wl,-Bdynamic -rdynamic -pthread

解决方法

您的系统时间是否与ntpd或ptp同步?如果没有,请更新您的tzdata包.

For systems not synchronized by ntpd or ptp an updated tzdata package
that contains the December 31st leap second is required. The updated
tzdata package was released as part of RHEA-2016-1982,and any systems
using RHEL 7 that are not synchronized by ntpd or ptp should update to
tzdata-2016g-2.el7,or a later version,to receive this fix.

Resolve Leap Second Issues in Red Hat Enterprise Linux

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读