linux – 如何在不重启的情况下修复闰秒睡眠问题
我发现在最新的闰秒插入后(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包.
Resolve Leap Second Issues in Red Hat Enterprise Linux (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |