文章作者:luxianghao

文章来源:http://www.cnblogs.com/luxianghao/p/6339470.html  转载请注明,谢谢合作。

免责声明:文章内容仅代表个人观点,如有不当,欢迎指正。

---

为什么会有闰秒?

世界上有几种计量时间的方式,

世界时(UT1):是一种天文计量的方式,天文学家通过观测地球的自转,并将自转一周的时间(一天)等分为864000份,每份为一秒,

受潮汐等因素的影响,地球自转一周的时间并不是恒定的,这也是造成闰秒现象的直接原因。

原子时(TAI):由于上面描述的世界时并不稳定,物理学家用更为稳定的量子计量的方式来统计时间,1967年,国际计量大会用铯133

(Cs133)原子基态的两个超精细能级之间的跃迁所对应辐射的9192631770个周期所持续的时间定义为1秒,这个是目前最精确的时间

计量方式,其误差为1400000年一秒,基本可忽略不计

协调世界时(UTC):又称世界标准时间或世界协调时间,UTC以TAI为基础,又要兼顾UT1,当UTC,和UT1之间的偏差接近1秒时,

国际地球自转和参考系服务(IERS)会提前6个月公布下一次闰秒的时间。

闰秒是否有规律,多长时间闰秒一次?

如下图所示,看起来并没有什么规律,如之前所说,影响地球自转的因素没什么规律,那么闰秒自然也没什么规律。

闰秒有什么影响?

对于普通人来说,正常的上班、下班、工作、学习,生命中偏差的这一秒无关痛痒,这个倒不会像闰年,闰月那样,影响人的生日

对于对时间要求比较精确的航空、航天、军工等,影响就会比较大了

对于我所在的互联网行业,服务器清一色的linux系统,闰秒可能会造成机器cpu突然增高,机器宕机等,对应的服务就会挂掉,

因为互联网是最近几年才蓬勃发展起来,所以之前的闰秒对linux的影响就没被放大,随着linux的普遍使用,闰秒也被越来越多的被关注。

闰秒对linux以及在linux上run的应用的影响

系统打印闰秒插入信息的时候夯住:当NTP通知内核关于闰秒的动作时,这个bug会被触发,这个bug会发生在闰秒发生的前一天的任何时候,

这个bug提前被触发的原因是NTP时间服务器会提前一天通知连接它的linux服务器,将来的某个时刻会发生闰秒,linux服务器的ntp收到这个信息

后会在闰秒时刻对linux的时间做一些处理,增加一秒,或者减去一秒

闰秒活锁导致系统夯住:由于这个bug,NMI看门狗会检测到系统夯住,系统会不停的crash;闰秒被插入后这个bug就会被触发,目前还没确定

哪个版本修复了这个bug

cpu load快速增高:其原因为应用程序不能处理闰秒带来的系统时间的突然变化,linux系统提供两种系统时间,wall time和montonic time,其中

wall time记录的是事实时间,可以向前或者向后调整,montonic time记录的是系统从启动以来的秒数,只能向前递增,因此如果应用程序在获取时间

时用的wall time则会受到系统时间调整(如闰秒)的影响,而采用后者则不会受到影响,具体到jdk来说明在jdk 7u6开始采用后者。

不能处理闰秒的内核在处理闰秒发生故障时会有什么样的系统日志

eg: Kernel panic - not syncing: Watchdog detected hard LOCK UP on cpu 21

闰秒后系统日志会有什么记录?

eg: kernel[81951.244556] Clock: inserting leap second 23:59:60 UTC

内核bug修复情况

以上提到的bug在linux各个版本陆陆续续有修复,这里提供一个安全的版本,内核是2.6.39-200.3或者更高版本的可以认为是安全的

ntp && 闰秒

主机使用了ntp

此时主机在闰秒时的表现将取决于使用的ntp的版本

1 版本高于等于4.2.2p1-9 或者更高版本(除了ntp-4.2.6p5-19.el7, ntp-4.2.6p5-1.el6 and ntp-4.2.6p5-2.el6_6)

a 带-x参数运行:闰秒不是直接在内核中添加,而是把这一秒分散到大约2000秒中,1秒比之前长一些,缓慢的更改时间,

这样做的优点:

1)避免时间倒退造成的应用逻辑问题

2)比较奇怪的时间点23:59:60不会出现

3)由于实际上没有增加闰秒,所以上面描述的内核bug也不会出现

这样做的缺点:

1)由于调整的时间段内,一秒的长短实际上是不准确的,所以对时间精度要求高的场景就不适用了

2)由于ntp的更新机制,这个办法同样也不适用于那些要求所有节点时间一致的集群

b 不带-x参数运行,ntp会通知内核直接增加一秒(是突增的,非连续的)

2 版本低于4.2.2p1-9

ntp会通知内核直接增加一秒,或者在停止一秒

注意:如果主机上运行了ntp,那么运行“file /etc/localtime”,确保输出结果中有“no leap seconds”(这表明不会添加闰秒)

主机没有使用ntp

1 没有使用tzdata

那么主机的时间完全由自己调整,建议使用ntp加上-x参数

2 使用了tzdata

a 版本低于2015a,不会添加闰秒

b 大于等于2015a,并且运行“file /etc/localtime”,输出结果中有“X leap seconds”(X是个数字)

那么闰秒会以“23:59:60”这样的形式出现,这会导致DATE/TIMESTAMP数据类型出现问题,

你需要复制适当的/usr/share/zoneinfo文件覆盖/etc/localtime(这个操作是动态调整的,不需要重启)

应对闰秒的总结

1 升级内核使版本大于等于2.6.39-200.3,内核能够处理闰秒,但是依然要提防应用程序对时间的敏感度,具体情况可参考这个,

针对这样的应用程序,你需要

a 重构代码

b 升级对应的软件如jdk

2 在主机是任何版本内核的情况下,升级ntp是版本大于等于4.2.2p1-9,来应对那些对时间精度要求不高的场景

3 对于那些既不关心时间精度,也不想升级任何东西的,那就重启ntp

a 在上级时间服务器发闰秒通知开始之前停止ntp(需提前一天 /etc/init.d/ntpd stop),

b date -s "`date`" (重置系统时间,个人认为这样做可能是为了解开闰秒造成的死锁)

c 启动ntp/etc/init.d/ntpd start

4 copy时间文件应对tzdata添加的闰秒

Linux下配置tomcat+apr+native应对高并发

摘要:在慢速网络上Tomcat线程数开到300以上的水平,不配APR,基本上300个线程狠快就会用满,以后的请求就只好等待.但是配上APR之后,Tomcat将以JNI的形式调用Apache HTTP服 ...

(转)Linux下配置tomcat+apr+native应对高并发

摘要:在慢速网络上Tomcat线程数开到300以上的水平,不配APR,基本上300个线程狠快就会用满,以后的请求就只好等待.但是配上APR之后,Tomcat将以JNI的形式调用Apache HTTP服 ...

Linux 下configure 参数配置与软件的安装与卸载

Linux环境下的软件安装,并不是一件容易的事情:如果通过源代码编译后在安装,当然事情就更为复杂一些:现在安装各种软件的教程都非常普遍:但万变不离其中,对基础知识的扎实掌握,安装各种软件的问题就迎刃而 ...

Linux下mysql的安装和使用(C语言)

1 mysql的安装 我使用的ubuntu在线安装,非常简单,命令为: sudo apt-get install mysql-client mysql-server 2 mysql命令集合 网络太多了 ...

linux磁盘清理方法 Linux 下垃圾清理工具 BleachBit

由于当初安装系统设计不合理,有些分区的过小,以及网络通讯故障等造成日志文件速度增长等其他原因都可以表现为磁盘空间满,造成无法读写磁盘,应用程序无法执行等.下面就给你支几招(以/home空间满为例): ...

Linux 下最为人熟知的解压缩工具

很多时候,通过互联网发送或接收大文件和图片是一件令人头疼的事.压缩及解压缩工具正好可以应对这个问题.下面让我们快速浏览一些可以使得我们的工作更加轻松的开源工具. Tar Tar 由 ‘Tape arc ...

Linux下Oracle11G RAC报错:在安装oracle软件时报file not found一例

Linux下Oracle11G RAC报错:在安装oracle软件时报file notfound一例 1.现象 之前安装一切都比較顺利,安装oracle软件时,进度到30%时报错:file not f ...

linux下各安装包的安装方法

linux下各安装包的安装方法   一.rpm包安装方式步骤: 1.找到相应的软件包,比如soft.version.rpm,下载到本机某个目录: 2.打开一个终端,su -成root ...

转:// LINUX下为ORACLE数据库设置大页--hugepage

一.在解释什么情况下需要开启大页和为啥需要开启大页前先了解下Linux下页的相关的知识:以下的内容是基于32位的系统,4K的内存页大小做出的计算1)目录表,用来存放页表的位置,共包含1024个目录en ...

随机推荐

Listener实现单态登陆

MyEclipse中新建Web Project项目,完整目录如下: 需要的jar包为commons-logging-xxx.jar 1.singleton.jsp

c# 编程语言 编译器 Roslyn

4 月3日,微软向公众发布了Roslyn编译器项目,该项目采用了Apache开源许可协议.C#的创始人 Anders Hejlsberg在Build大会的第二场主题演讲中将这一令人震惊的消息公之于众. ...

尝试Hexo

Hexo是没弄好,目前还只在GitHub上搭建了个框架,地址:https://lengdefengren.github.io/  或者lengdefengren.github.io 我测试Hexo已经 ...

MD5算法原理

//消息摘要:将任意长度的字符数组处理成定长的字符数组,用于确保原字符串不被修改, //也可以用做密码确认,如果密码一致,则MD5产生后的值必然一致,否则不相同 public class DataUt ...

IDEA下安装/配置Jrebel

IDEA下安装/配置Jrebel6.X 1. 为什么要使用Jrebel 在日常开发过程中, 一旦修改配置/在类中增加静态变量/增加方法/修改方法名等情况, tomcat不会自动加载, 需要重启tomc ...

Abstraction elimination

(本文不保证不误人子弟,切勿轻信) Unlambda指的是lambda计算中去掉lambda操作(does not have lambda(or abstraction) operation of t ...

WCF(三)分布式事务

最近在学WCF,所以有两个设想疑问(菜鸟多疑问): 如果有WCF服务A,WCF服务B,客户端调用WCF服务A插入一条数据,然后再调用服务B也插入一条数据,然而服务B出错了进行了回滚,服务A能不能也进行 ...

Selenium的webdriver的常用方法,鼠标事件

就来认识 WebDriver 中最常用的几个方法: get():跳转到的地址clear(): 清除文本. send_keys (value): 模拟按键输入. click(): 单击元素. 示例: f ...

[ZZ]面向对象编程,再见!

面向对象编程,再见!- 机器学习算法与自然语言处理 https://mp.weixin.qq.com/s/icXBlVOOYLvDnER7cEeCeg https://medium.com/@csca ...

通过css属性hack完成select样式美化,并兼容IE

最近在重构时遇到了select样式问题,并且需要在不影响语义化的情况下,兼容IE8. 经过一番的百度后始终没有找到合适的纯CSS解决方案,最后换了一下思路,大胆使用了属性hack: 在chrome和F ...

2017 闰秒 linux,应对linux下的闰秒相关推荐

  1. 2017年闰秒linux_2017年Linux专业人员的4个热门技能

    2017年闰秒linux 成为Linux专家的问题之一是定义在不断变化. 当我开始从事Linux领域(被视为Linux专家)时 ,您必须能够编译自己的内核. 哎呀,如果要在笔记本电脑上使用Linux, ...

  2. 两款【linux字符界面下】显示【菜单】,【选项】的powershell脚本模块介绍

    两款[linux字符界面下]显示[菜单],[选项]的powershell脚本模块介绍 powershell linux  ps1 menu choice Multiselect 传教士 菜单 powe ...

  3. linux的manual手册不存在,在 Linux 命令行下使用“原力”

    原标题:在 Linux 命令行下使用"原力" 和绝地武士的原力一样,-f 参数是很强大的,并伴随着潜在的毁灭性,在你能用好的时候又很便利. -- Alan Formy-duval( ...

  4. [转帖]linux /proc目录下的文件为何无法用vi编辑保存

    linux /proc目录下的文件为何无法用vi编辑保存 https://blog.51cto.com/xlogin/1216914 学习一下 之前看过书 这一点 没太仔细看.. xlogin关注8人 ...

  5. Linux Centos7.x下安装部署Jira和confluence以及破解方法详述

    https://www.cnblogs.com/easonscx/p/10629173.html Linux Centos7.x下安装部署Jira和confluence以及破解方法详述 简述 JIRA ...

  6. 过滤Linux下不同大小的文件,linux查找当前目录下 M/G 大小的文件,删除Linux下指定大小的文件

    过滤Linux下不同大小的文件,linux查找当前目录下 M/G 大小的文件,删除Linux下指定大小的文件 find ./ -type f -size +1G| xargs rm 在清理系统日志文件 ...

  7. nvidia命令不可用linux,在Linux命令行下如何正确配置nVIDIA显卡

    在图形芯片领域,nVidia是一个后来者,它的历史仅相当于ATi的一半.1993年初,NVIDIA 由 Jen-Hsun Huang,,Chris Malachowsky和 Curtis Priem ...

  8. Linux :debian(ubuntu)下安装和使用haskell

    文章目录 Linux :debian(ubuntu)下安装haskell 安装 使用 Linux :debian(ubuntu)下安装haskell 安装 直接使用apt进行安装: sudo apt- ...

  9. Linux: debian/ubuntu下安装和使用Java 11

    Linux: debian/ubuntu下安装和使用Java 11 只需6行命令: su - echo "deb http://ppa.launchpad.net/linuxuprising ...

最新文章

  1. 又一个巨头决定彻底放弃微服务,全面拥抱K8S!
  2. ORACLE数据库系统结构
  3. 写下今年1024的一篇文章
  4. 2017-2018-1 20155327 实验四 外设驱动程序设计
  5. C++ STL 优先队列
  6. 【Python】文件的使用
  7. 【其他】命名风格之unix like风格,Windows风格,ST固件库风格,驼峰命名
  8. ArcGIS制图表达Representation实战篇1-边界线和行道树制作
  9. NYOJ 300 amp;amp; hdu 2276 Kiki amp; Little Kiki 2 (矩阵高速功率)
  10. Tkinter注册界面判断用户名是否唯一的合法性验证(Python3.7)
  11. Adobe(Pr Ae)动态图形模板
  12. 【大厂面试必备系列】滑动窗口协议
  13. 【Codecs系列】颜色空间转换CSconvert:NV21转BGR24和BGR24转NV21
  14. python 显示界片_任何快速的python图形用户界面都可以显示摄像机的实时图像
  15. 用JS写小鸟飞行的游戏
  16. springboot上传下载文件(4)--上传下载工具类(已封装)
  17. 一个父亲需要挣多少钱,才能撑起一个家?
  18. 性格色彩测试android程序开发之五--dialog事件的处理
  19. 使用svelte+webpack 打包成umd形式的js库
  20. mysql delete语句非常耗时_解决项目中MySQL数据库执行删除语句时间太长的问题

热门文章

  1. 晶体管计算机芯片原理图,芯片都是由晶体管构成的,芯片难制造是因为晶体管吗?...
  2. 计算机基础-不等式的概念及解法
  3. 论文--计算机视觉中的注意力机制
  4. Android 通过串口获取设备号 android串口测试工具 完整解析
  5. 【正点原子Linux连载】第六章 Qt Creator的使用技巧 摘自【正点原子】I.MX6U嵌入式Qt开发指南V1.0.2
  6. Post Hoc Test
  7. Delphi 读写Oracle,中文出现乱码:靠靠
  8. 手把手教你完成图像分类实战——基于卷积神经网络的图像识别
  9. R语言使用lm函数拟合多项式回归模型:使用predict函数和训练好的模型进行预测推理、计算回归模型的评估指标MAE、MSE、RMSE、R方等指标
  10. 长期跑步需要买个运动耳机吗、最好用的5款跑步耳机推荐