闰秒对linux的影响分析及解决
2015-06-16 19:43
645 查看
大概了解了下闰秒及其如何让linux kernel panic:
闰秒的产生:日常所用时间UTC,是根据地球自转计时,跟精确的原子时钟存在偏差,为了保持一致,每偏差1s就进行1次同步,就产生了闰秒。即如人们所讲的,在今年6月30号出现23:59:60。
开源的NTPD在同步服务器时间时,直接调用系统调用adjtimex到达内核的ntp处理逻辑,内核的do_adjtimex经过一系列处理逻辑,判定在发生闰秒时,调用printk给出打印提示:
printk(KERN_NOTICE
"Clock: inserting leap second 23:59:60 UTC\n");
而此时是对xtime_lock加锁的,printk会尝试唤醒klogd,而调度发生时又会获取系统时间,出现死锁。
参考:http://blog.jobbole.com/22714/,http://coolshell.cn/articles/7804.html
其他影响,对时间比较敏感的业务要注意防止消息事件的乱序。
简要解决方法:在发生闰秒前停掉ntpd服务,闰秒发生后再开启ntpd
根解:放弃使用ntpd,使用简化的sntp协议,同时在实现直接调用settimeofday来完成,不会触发内核的事件调整异常
闰秒的产生:日常所用时间UTC,是根据地球自转计时,跟精确的原子时钟存在偏差,为了保持一致,每偏差1s就进行1次同步,就产生了闰秒。即如人们所讲的,在今年6月30号出现23:59:60。
开源的NTPD在同步服务器时间时,直接调用系统调用adjtimex到达内核的ntp处理逻辑,内核的do_adjtimex经过一系列处理逻辑,判定在发生闰秒时,调用printk给出打印提示:
printk(KERN_NOTICE
"Clock: inserting leap second 23:59:60 UTC\n");
而此时是对xtime_lock加锁的,printk会尝试唤醒klogd,而调度发生时又会获取系统时间,出现死锁。
参考:http://blog.jobbole.com/22714/,http://coolshell.cn/articles/7804.html
其他影响,对时间比较敏感的业务要注意防止消息事件的乱序。
简要解决方法:在发生闰秒前停掉ntpd服务,闰秒发生后再开启ntpd
根解:放弃使用ntpd,使用简化的sntp协议,同时在实现直接调用settimeofday来完成,不会触发内核的事件调整异常
相关文章推荐
- linux下etc下resolv.conf文件的作用
- linux下etc下hosts文件的作用
- linux下nc命令
- centos6 程序中编译出现curses.h不存在问题
- Linux U盘安装
- Linux_2.1_编程规范
- Linux之tar.gz file
- Linux-rsync+inotify 文件实时同步
- centos6 挂载超过16T的大容量存储空间
- linux下大于2T的硬盘格式化问题
- Linux&&Windows文件同步简单配置[rsync]
- linux下用脚本实现:监控一个进程,不存在则将其启动。
- 虚拟内存管理 --嵌入式Linux系统工程师系列之ARM920T的MMU与Cache
- maven项目如何在Linux下运行?
- linux进程调度CFS
- Linux_1.5_makefile工程管理
- 每天进步一点点——linux——mv
- 关于LINUX打PACTH简单记载
- Linux打Patch的方法
- 安装Linux