程序員的必修課:為什么Hacker News昨晚一夜宕機(jī)
這是Hacker News官方網(wǎng)站上的一篇聲明,解釋為什么Hacker News昨晚上宕機(jī)一夜。
昨天Hacker News宕機(jī)了一晚上。問(wèn)題不是由于我們新上的服務(wù)器。事實(shí)上,其中的原因愚蠢的讓人不好意思說(shuō)。
有一個(gè)評(píng)論貼,一個(gè)新用戶想在里面發(fā)表回復(fù),但發(fā)布出去的內(nèi)容沒(méi)有成為目標(biāo)評(píng)論的子評(píng)論,反而成為與它平級(jí)的評(píng)論。我回復(fù)了一個(gè)評(píng)論來(lái)解釋 Hacker News是如何工作的。但我覺(jué)得該幫這個(gè)人修復(fù)一下,在他的回復(fù)上做個(gè)小手術(shù)。不幸的是,我用錯(cuò)了評(píng)論的ID,使評(píng)論的樹(shù)結(jié)構(gòu)里出現(xiàn)了一個(gè)循環(huán);我使一條評(píng)論成為了它自己的下級(jí)評(píng)論。這樣一來(lái),任何一個(gè)人試圖瀏覽這個(gè)帖子時(shí),服務(wù)器都會(huì)生成一個(gè)無(wú)限長(zhǎng)的長(zhǎng)頁(yè)面。因?yàn)檫@個(gè)評(píng)論所屬的文章正處在首頁(yè),所以這個(gè)動(dòng)作被大量的執(zhí)行。
不知什么原因,我在修改這個(gè)評(píng)論后并沒(méi)有去查看這個(gè)評(píng)論是否留在了它正確的位置。一定是有什么事情讓我分心了。所以我沒(méi)有發(fā)現(xiàn)任何異常,直到不久之后服務(wù)器看起來(lái)開(kāi)始有些喘。
我截取了服務(wù)器日志看發(fā)生了什么,里面的信息看起來(lái)是Hacker News缺少足夠的內(nèi)存,在頻繁的回收內(nèi)存。不管是不是這個(gè)原因,或出現(xiàn)了其它事故,這種問(wèn)題一般是通過(guò)重啟服務(wù)器都能解決。于是我這樣做了。因?yàn)楫?dāng)天我開(kāi)發(fā)了一些代碼,所以當(dāng)我重啟服務(wù)器時(shí),上面運(yùn)行的是新版程序。
重啟了服務(wù)后,問(wèn)題依舊存在。我懷疑是我那天寫的程序里有什么問(wèn)題,我嘗試將版本恢復(fù)到上一版,然后重啟服務(wù)。但問(wèn)題依舊存在。我們又試著把這以前老服務(wù)器上的程序拿過(guò)來(lái)?yè)Q上,也不好用。我們認(rèn)識(shí)到程序應(yīng)該是沒(méi)問(wèn)題的,我們認(rèn)為問(wèn)題應(yīng)該出在了這個(gè)新服務(wù)器上。于是我們?cè)噲D切換到老的服務(wù)器上。我不知道我的同事Nick是否成功的切換,因?yàn)橹型疚曳艞壛?,睡覺(jué)去了。
當(dāng)我今早醒來(lái),監(jiān)控顯示Hacker News仍然在新服務(wù)器上跑。出問(wèn)題的那條評(píng)論仍在那,但那篇文章已經(jīng)被新上來(lái)的文章頂出首頁(yè)。所以整體上Hacker News并沒(méi)有宕機(jī),但跡象仍顯示什么地方出了問(wèn)題。例如,/threads?id=pg 無(wú)法訪問(wèn),因?yàn)槲沂惯@個(gè)帖子里出現(xiàn)了死循環(huán)。
終于,數(shù)據(jù)顯示,問(wèn)題似乎跟某個(gè)特定的ID相關(guān)。當(dāng)我到服務(wù)器上查看這條數(shù)據(jù)時(shí),終于意識(shí)到了一定是我做錯(cuò)了事。
于是我又給那個(gè)回復(fù)動(dòng)了一次手術(shù),這次很小心,一切又恢復(fù)正常了。
我感到很抱歉。
英文原文:Why HN was down
譯文鏈接:http://www.aqee.net/hacker-news-was-down-all-last-night/















 
 
 






 
 
 
 