北京時間7月3日消息,《連線》雜志近日刊載文章稱,當上周六出現(xiàn)“閏秒”時,包括社交新聞聚合網(wǎng)站Reddit在內(nèi)的多家網(wǎng)站都遭遇了故障。文章對這種所謂的“閏秒故障”進行了剖析,并列出了一些解決方案,其中包括將計算機系統(tǒng)的網(wǎng)絡(luò)時間協(xié)議暫停一秒鐘,以及谷歌所采取的“l(fā)eap smear”(閏秒彌補)的方法等。
以下是這篇文章的全文:
上周六晚上,當“閏秒故障”(leap second glitch)導(dǎo)致社交新聞聚合網(wǎng)站Reddit受創(chuàng)時,詹森·哈維(Jason Harvey)并未認識到這是“閏秒故障”。他原本以為那是與亞馬遜云服務(wù)大規(guī)模中斷相關(guān)的某種類型的互聯(lián)網(wǎng)減速,從而導(dǎo)致網(wǎng)絡(luò)上一些最流行的服務(wù)在不到24個小時以前均遭遇了技術(shù)故障。
“那看起來就像是網(wǎng)絡(luò)運行表現(xiàn)很差的樣子�!惫S說道,他是管理Reddit運作的系統(tǒng)管理員之一。“在亞馬遜宕機的情況下,出現(xiàn)一個網(wǎng)絡(luò)問題是說得通的�!�
但在大約半個小時以后,哈維和他的團隊在對故障進行追蹤以后發(fā)現(xiàn),Reddit自身運行開源Linux操作系統(tǒng)的機器出現(xiàn)了問題。由于未能進行正確調(diào)試以適應(yīng)“閏秒”變動的緣故,這些服務(wù)器幾乎陷入了停止狀態(tài)。閏秒是對“協(xié)調(diào)世界時”(UTC)所做出的基本調(diào)整,目的是使其與太陽時間保持同步,但這多出來的一秒鐘給網(wǎng)絡(luò)服務(wù)器帶來了很大的問題。
根據(jù)地球的自轉(zhuǎn)速度,國際計量局會定期在年底或年中(也可能在季末)對協(xié)調(diào)世界時增加一秒鐘,使其能與地球自轉(zhuǎn)同步。這不會讓我們漸漸走向日落在早晨時發(fā)生,但可能會在計算機系統(tǒng)中帶來問題,原因是計算機系統(tǒng)需要在時鐘里多加一秒,但系統(tǒng)本身不夠靈活,因此無法處理這多出來的一秒鐘。
在Reddit的例子中,這個問題可被追蹤至Linux內(nèi)核中的一個故障,這是開源Linux操作系統(tǒng)的核心。一個被稱為“hrtimer”——即高精度定時器的縮寫——的Linux子系統(tǒng)由于這種時間上的變動而變得混亂,因此突然引發(fā)了服務(wù)器上的過度活動,最終導(dǎo)致服務(wù)器中央處理器被鎖定。
Reddit只是在上周六受到“閏秒故障”影響的多家網(wǎng)站之一,美國博客媒體Gawker Media和Mozill等網(wǎng)站也都遭遇了同樣的故障;而且,這種問題傾向于在每次出現(xiàn)“閏秒”調(diào)整時都會發(fā)生。舉例來說,在2009年1月份,有報道稱閏秒導(dǎo)致Sun Microsystems的Solaris操作系統(tǒng)和甲骨文的軟件包都出現(xiàn)了問題。
“幾乎每一次出現(xiàn)閏秒時,我們都會發(fā)現(xiàn)點什么�!庇小癓inux之父”之稱的利納斯·托瓦爾德斯(Linus Torvalds)向《連線》雜志表示�!斑@真的是很煩人,因為這是代碼基本上無法運行的一個經(jīng)典例子,因而在正常情況下用戶無法對其進行測試�!�
在今年3月份,黑客約翰·斯圖爾茨(John Stultz)為Linux核心中的高精度定時器故障提供了一個補丁,但某些版本的Linux尚未進行更新來加入這個補丁。斯圖爾茨周一并未對此置評,但據(jù)他在一個在線郵件列表中發(fā)布的內(nèi)容顯示,他曾討論過導(dǎo)致Reddit出現(xiàn)服務(wù)故障的問題。
故障剖析
那么,這些服務(wù)器到底發(fā)生了什么事情呢?這是一件很復(fù)雜的事情。甚至就連利納斯·托瓦爾德斯也表示,如果想要真正理解到底發(fā)生了些什么,那么我們應(yīng)該與斯圖爾茨談?wù)�。但在對多名熟知這個問題的人進行訪談以后,我們對到底發(fā)生了什么有了一種很好的認知。
高精度定時器是在一個應(yīng)用“睡眠”時被使用的子系統(tǒng),它會等待操作系統(tǒng)完成某些其他的任務(wù)。在某些情況下,高精度定時器會為這些睡眠中的應(yīng)用設(shè)定一種鬧鐘,會在操作系統(tǒng)花費太多時間來處理其他工作時敲響。從斯圖爾茨在郵件列表中發(fā)布的內(nèi)容來判斷,當閏秒發(fā)生時,這些高精度定時器會突然變得比核心操作系統(tǒng)提前一秒,因此就會開始敲響那些鬧鐘,從而同時喚醒無數(shù)睡眠中的應(yīng)用,導(dǎo)致服務(wù)器的中央處理器超載。
不過,Reddit的情況則略有不同,這個網(wǎng)站的服務(wù)器運行著一個名為Cassandra的開源數(shù)據(jù)庫,該數(shù)據(jù)庫是由Java編程語言構(gòu)建而成的,在Linux上運行。就詹森·哈維所說,在閏秒發(fā)生時,Cassandra無法暫停Java進程,導(dǎo)致這些進程陷入不斷旋轉(zhuǎn)的循環(huán)中,從而耗盡Reddit服務(wù)器的中央處理器功率。
到最后,Reddit通過重啟服務(wù)器的方式解決了這個問題。這個網(wǎng)站在大約30到49分鐘的時間里幾乎完全不能使用,在大約一個半小時里處于完全脫機的狀態(tài)。
在Reddit竭盡全力試圖解決Cassandra服務(wù)器問題的同時,美國八卦網(wǎng)站Gawker的Tomcat服務(wù)器也遭遇了故障,Mozilla則面臨著與Hadoop服務(wù)器有關(guān)的問題。Hadoop和Tomcat也都依賴于Linux平臺和Java技術(shù),看起來這些服務(wù)器也都遭遇了同一個故障的侵襲。
與此同時,其他系統(tǒng)則在閏秒來臨的前一天遭遇了問題。Linux等系統(tǒng)使用網(wǎng)絡(luò)時間協(xié)議(Network Time Protocol)來與全球原子鐘進行對接,從而對時間作出調(diào)整。在上周五,網(wǎng)絡(luò)時間協(xié)議開始向服務(wù)器發(fā)起警報稱,今年的閏秒即將來臨。據(jù)Opera Software系統(tǒng)管理員Marco Marongiu稱,至少有一部分Opera服務(wù)器在收到這一通知時就已經(jīng)開始被鎖定。這個問題在一個Linux郵件列表中被討論過,目前還不清楚這個問題與Reddit經(jīng)歷的高精度定時器問題有多么密切的聯(lián)系。
下一次閏秒
我們不知道下一次閏秒將在何時發(fā)生,這要視地球的自轉(zhuǎn)速度有多快而定——這一速度既有可能減慢也有可能加快,具體要視潮汐、天氣和熔態(tài)金屬在地球核心的流動而定。但是,當下一次閏秒發(fā)生時,可能會帶來更多的問題。
托瓦爾德斯指出,無論是在什么時候,如果時間被弄混,那么情況就很有可能會變得糟糕。開發(fā)者可能會提前進行測試,但很難預(yù)計現(xiàn)實世界中將會發(fā)生怎樣的事情�!伴c秒和夏令時間都是特別令人痛苦的事情,原因是它們會帶來更多的復(fù)雜性,在沒有嚴格規(guī)則約束的情況下變得隨機化。而在這兩種時間變動中,閏秒更令人感到痛苦�!�
正如托瓦爾德斯所指出的那樣,將地球的實際自轉(zhuǎn)時間與原子鐘所衡量的時間同步起來是一件棘手的事情。但從整體上來說,過去15年時間里科技行業(yè)并未很多次地經(jīng)歷過閏秒。事實上,加利福尼亞州圣何塞的利克天文臺(Lick Observatory)的程序員史蒂夫·艾倫(Steve Allen)指出,這可能也是導(dǎo)致“閏秒故障”問題的原因之一。“在1999年到2005年之間并未出現(xiàn)過閏秒,因此所有的云服務(wù)和多處理器等產(chǎn)品和服務(wù)都是在閏秒并未發(fā)生過的階段中形成的�!彼f道。
推薦閱讀
北京時間7月4日消息,據(jù)國外媒體報道,英特爾周二向歐盟常設(shè)法庭提出上訴,聲稱歐盟反壟斷監(jiān)管部門在起訴英特爾案件中依賴的證據(jù)是非常不充分的。英特爾希望能夠撤銷或減少歐盟對其作出的10.6億歐元(約合13.3億美元)>>>詳細閱讀
本文標題:《連線》雜志:走近閏秒故障及其解決方案
地址:http://www.oumuer.cn/a/22/20120704/73028.html