论文部分内容阅读
2012年7月1日,世界多出了一秒钟的时间。
你大可以利用这多出的一秒钟来思考人生。不过如果你碰巧在这一天访问了LinkedIn、Foursquare、Yelp等等知名网站,你会发现它们在这一天都遇到了大麻烦:访问速度变得越来越慢、无法使用直至最终宕机。
遭到黑客攻击或者突然间用户像潮水一样集中涌向站点,通常是一个网站宕掉的原因。然而在7月1日这一天,罪魁祸首却是那多出的一秒,它被称为“闰秒”,直接给那些网站系统的稳定性带来了麻烦。
比如社交新闻网站Reddit在遭遇闰秒问题时通过Twitter发表了声明:太平洋标准时间下午5时,我们遭遇与“闰秒”相关的故障,正在尽力恢复服务;在另一家博客媒体网站Gawker,服务变得非常不稳定的情况持续了30多分钟。
受到影响的还不仅仅是互联网服务,航空系统也被闰秒问题波及。在澳大利亚繁忙的旅客空运中,闰秒问题造成了包括澳洲航空公司(Qantas Airways)、维珍澳大利亚航空公司等办理乘客登记手续的系统出现故障,导致澳大利亚多个机场的航班无法登机。
这场突如起来的麻烦的始作俑者其实正是人类自己发明的计时方式。
在长期的科学研究中科学家们发现,由于地球自转等不恒定的因素,日常计时所采用的、基于天文测量的“世界时”,与自己所希望达到的时间精度并不相符。它们提出了“原子时”的概念,这是一种利用原子振荡周期所制定的计时方式,由于没有受到外界因素的影响,相对恒定不变。原子钟的精度可以达到每100万年才误差1秒,是一种更为严格和精确的时间尺度标准。
“原子时”与“世界时”后来成了两种在不同领域使用的时间计量系统,通常在一年至两年的时间内,两者会出现大约一秒钟的时差。1971年国际计量大会通过了一项决议,使用“协调世界时”来统一计量时间。协调世界时是以原子时的秒长为基础,然后在时刻上又尽量接近于世界时的一种时间计量系统。在日常生活中,我们所使用的时间就是协调世界时,英文简称UTC。
当“协调世界时”和“世界时”之差超过0.9秒时,位于巴黎的国际地球自转服务组织(IERS)就负责对“协调世界时”拨快或拨慢一秒(至今都是拨快一秒),这一秒就被命名为闰秒。
自1972年以来,协调世界时已数十次增加闰秒,上一次增加闰秒的时间是在2008年的12月31日。2012年增加闰秒的时间是从6月30日开始,全球各地相继多出了1秒钟的时间,不同的时区会先后陆续调整。比如位于东八区的中国,北京时间7月1日上午,中国与全球同步进行了闰秒调整,不同于以往由7点59分59秒进入8点钟的状况,电子表上出现了7点59分60秒的景象。
闰年四年出现一次,但闰秒却并不这么老实,它的出现时间毫无规律。因为这个时间要视地球自转速度而定,所以无法预测。在1999年到2005年之间并未出现过闰秒调整,而自2005年以来则一共有三次闰秒调整发生,分别是在2005年、2008年年底和现在的2012年。
麻烦的是,它被很多计算机程序员忽略了。
接受采访的Linux工程师李凡希向《第一财经周刊》解释说,闰秒给计算机系统带来问题是因为写程序的人没有意识到有闰秒的存在,按照一分钟总是60秒的方式使用。由于没有进行特殊的处理,结果导致在闰秒问题出现时,程序便不能正常地工作。
此次受到影响的网站、程序或者系统,遭遇的就是这样的问题。当计算机在7月1日这一天遭遇闰秒调整时,系统时钟的“异常”变化导致了原本顺利运转的程序出现了各种意外。
很多时候,计算机系统就像一个军营,不常用应用的“唤醒”时间被严格限定,以免影响主要任务的执行。但当闰秒发生时,高精度的唤醒机制失灵了。于是本应睡眠的那些应用被提前唤醒,并且带来了连锁反应,最终造成CPU和服务器的超载。你可以想象一个只能容纳5万人的体育场里忽然涌进了10万人,就是这么拥挤。
这一问题还会让那些运行在Linux系统上的网站深受影响。还是来自Reddit的例子。这个网站的服务器使用Java语言编写,运行在开源的Linux服务器上。在闰秒发生时,系统无法按照预先设定的那样停止工作进程,导致这些进程陷入无法停止的死循环中,最终耗尽了服务器的资源。
另外一种情况也很令人头疼,那就是服务器系统在启动与网络时钟有关联的任务时发生死锁。按照一位网站系统工程师的介绍,这相当于在一连串连续任务中,由于第一项任务迟迟无法完成,后续任务只能陷入等待,如同一条发生堵车的高速公路,整个服务器陷入了瘫痪状态。
有点幸运的是,闰秒是一个可以“蒙混过关”的麻烦。当服务器资源耗尽后重新启动,此时已经过了闰秒所在的那个特定的时间点,系统时间就能自动重新对上表了。只不过那些网站要为自己程序员的粗心付出一点代价,在系统资源慢慢耗尽的过程中,会有30到49分钟的时间里完全无法使用,在后续的大约1个半小时里会处于在一种完全脱机的状态,令用户抓狂不已。
有些人开始担心闰秒的存在是不是会产生其他潜在的危害。在2012年1月,国际电信联合会做出了一个决定,将在2015年决定闰秒的最终存废。从目前的态势上看,法国、意大利、日本、墨西哥和美国倾向支持,加拿大、中国、德国和英国倾向反对,俄罗斯和土耳其等其国家则表示需要“更多研究”。
闰秒问题并没有让所有使用Linux服务器的网站出现不正常,相关的Bug存在于Linux的特定版本中,可以通过升级来避免下次闰秒出现时发生类似的问题。
Google想出了另一种方法。既然闰秒是人工干涉调整的,那么解决闰秒问题也可以通过“操纵时间”来实现。2011年9月,Google在自己的官方博客中说,可以采用一种被称为“leap smear”的解决方法。它们调整了内部的网络时间协议(NTP)服务器,每次更新时都会增加几毫秒,通过这样的累计,在闰秒发生时便可以达到增加1秒钟的目的。所有服务器会在那一刻继续正常工作,根本感觉不到闰秒的发生。
Google实际上拉长了时间的长度,只不过那些短暂的几毫秒瞬间我们根本感受不到而已。
联系编辑:xielingning@yicai.com
你大可以利用这多出的一秒钟来思考人生。不过如果你碰巧在这一天访问了LinkedIn、Foursquare、Yelp等等知名网站,你会发现它们在这一天都遇到了大麻烦:访问速度变得越来越慢、无法使用直至最终宕机。
遭到黑客攻击或者突然间用户像潮水一样集中涌向站点,通常是一个网站宕掉的原因。然而在7月1日这一天,罪魁祸首却是那多出的一秒,它被称为“闰秒”,直接给那些网站系统的稳定性带来了麻烦。
比如社交新闻网站Reddit在遭遇闰秒问题时通过Twitter发表了声明:太平洋标准时间下午5时,我们遭遇与“闰秒”相关的故障,正在尽力恢复服务;在另一家博客媒体网站Gawker,服务变得非常不稳定的情况持续了30多分钟。
受到影响的还不仅仅是互联网服务,航空系统也被闰秒问题波及。在澳大利亚繁忙的旅客空运中,闰秒问题造成了包括澳洲航空公司(Qantas Airways)、维珍澳大利亚航空公司等办理乘客登记手续的系统出现故障,导致澳大利亚多个机场的航班无法登机。
这场突如起来的麻烦的始作俑者其实正是人类自己发明的计时方式。
在长期的科学研究中科学家们发现,由于地球自转等不恒定的因素,日常计时所采用的、基于天文测量的“世界时”,与自己所希望达到的时间精度并不相符。它们提出了“原子时”的概念,这是一种利用原子振荡周期所制定的计时方式,由于没有受到外界因素的影响,相对恒定不变。原子钟的精度可以达到每100万年才误差1秒,是一种更为严格和精确的时间尺度标准。
“原子时”与“世界时”后来成了两种在不同领域使用的时间计量系统,通常在一年至两年的时间内,两者会出现大约一秒钟的时差。1971年国际计量大会通过了一项决议,使用“协调世界时”来统一计量时间。协调世界时是以原子时的秒长为基础,然后在时刻上又尽量接近于世界时的一种时间计量系统。在日常生活中,我们所使用的时间就是协调世界时,英文简称UTC。
当“协调世界时”和“世界时”之差超过0.9秒时,位于巴黎的国际地球自转服务组织(IERS)就负责对“协调世界时”拨快或拨慢一秒(至今都是拨快一秒),这一秒就被命名为闰秒。
自1972年以来,协调世界时已数十次增加闰秒,上一次增加闰秒的时间是在2008年的12月31日。2012年增加闰秒的时间是从6月30日开始,全球各地相继多出了1秒钟的时间,不同的时区会先后陆续调整。比如位于东八区的中国,北京时间7月1日上午,中国与全球同步进行了闰秒调整,不同于以往由7点59分59秒进入8点钟的状况,电子表上出现了7点59分60秒的景象。
闰年四年出现一次,但闰秒却并不这么老实,它的出现时间毫无规律。因为这个时间要视地球自转速度而定,所以无法预测。在1999年到2005年之间并未出现过闰秒调整,而自2005年以来则一共有三次闰秒调整发生,分别是在2005年、2008年年底和现在的2012年。
麻烦的是,它被很多计算机程序员忽略了。
接受采访的Linux工程师李凡希向《第一财经周刊》解释说,闰秒给计算机系统带来问题是因为写程序的人没有意识到有闰秒的存在,按照一分钟总是60秒的方式使用。由于没有进行特殊的处理,结果导致在闰秒问题出现时,程序便不能正常地工作。
此次受到影响的网站、程序或者系统,遭遇的就是这样的问题。当计算机在7月1日这一天遭遇闰秒调整时,系统时钟的“异常”变化导致了原本顺利运转的程序出现了各种意外。
很多时候,计算机系统就像一个军营,不常用应用的“唤醒”时间被严格限定,以免影响主要任务的执行。但当闰秒发生时,高精度的唤醒机制失灵了。于是本应睡眠的那些应用被提前唤醒,并且带来了连锁反应,最终造成CPU和服务器的超载。你可以想象一个只能容纳5万人的体育场里忽然涌进了10万人,就是这么拥挤。
这一问题还会让那些运行在Linux系统上的网站深受影响。还是来自Reddit的例子。这个网站的服务器使用Java语言编写,运行在开源的Linux服务器上。在闰秒发生时,系统无法按照预先设定的那样停止工作进程,导致这些进程陷入无法停止的死循环中,最终耗尽了服务器的资源。
另外一种情况也很令人头疼,那就是服务器系统在启动与网络时钟有关联的任务时发生死锁。按照一位网站系统工程师的介绍,这相当于在一连串连续任务中,由于第一项任务迟迟无法完成,后续任务只能陷入等待,如同一条发生堵车的高速公路,整个服务器陷入了瘫痪状态。
有点幸运的是,闰秒是一个可以“蒙混过关”的麻烦。当服务器资源耗尽后重新启动,此时已经过了闰秒所在的那个特定的时间点,系统时间就能自动重新对上表了。只不过那些网站要为自己程序员的粗心付出一点代价,在系统资源慢慢耗尽的过程中,会有30到49分钟的时间里完全无法使用,在后续的大约1个半小时里会处于在一种完全脱机的状态,令用户抓狂不已。
有些人开始担心闰秒的存在是不是会产生其他潜在的危害。在2012年1月,国际电信联合会做出了一个决定,将在2015年决定闰秒的最终存废。从目前的态势上看,法国、意大利、日本、墨西哥和美国倾向支持,加拿大、中国、德国和英国倾向反对,俄罗斯和土耳其等其国家则表示需要“更多研究”。
闰秒问题并没有让所有使用Linux服务器的网站出现不正常,相关的Bug存在于Linux的特定版本中,可以通过升级来避免下次闰秒出现时发生类似的问题。
Google想出了另一种方法。既然闰秒是人工干涉调整的,那么解决闰秒问题也可以通过“操纵时间”来实现。2011年9月,Google在自己的官方博客中说,可以采用一种被称为“leap smear”的解决方法。它们调整了内部的网络时间协议(NTP)服务器,每次更新时都会增加几毫秒,通过这样的累计,在闰秒发生时便可以达到增加1秒钟的目的。所有服务器会在那一刻继续正常工作,根本感觉不到闰秒的发生。
Google实际上拉长了时间的长度,只不过那些短暂的几毫秒瞬间我们根本感受不到而已。
联系编辑:xielingning@yicai.com