一行代碼引發的“血案”



今天想起來一件好玩的事, 給大家分享下。 
事情發生在幾年前, 那時候大家忙活完一個新需求, 終於上線了, 都想鬆一口氣。 
可是很快就發生了一件令人抓狂的事情, 剛上線的系統總是莫名其妙的崩潰, 每次都得重啓才能解決。
更要命的是完全摸不到規律, 系統運行着運行着就down了, 毫不留情面。
趕緊組織人員檢查, 開發人員拍着胸脯, 信心滿滿: 肯定不是我們的問題!  先查查是不是環境的問題!
內存使用, 正常 。
硬盤空間,正常。
檢查日誌, 正常, 更找不到什麼OutofMemory。
難道是黑客入侵,工程師仔細檢查系統日誌,也沒有什麼蛛絲馬跡。 我們的系統也不涉及到錢, 根本不值得入侵。 
可是系統總是那麼靜悄悄的,冷酷的down機, 快把大家都逼瘋了。
如果是你該怎麼辦? 

懷疑了一圈別人的問題以後,最好也懷疑一下自己。 
我們就開始嚴格的審查這個新需求新加的,和改動的代碼,10幾雙眼睛不知道看了多少遍, 還是一無所獲。

後來不知道是誰,偶然看到了程序中有這麼一行可怕的代碼: System.exit(1) , 然後趕緊檢查它和這個改動的關係。 
果然, 在改動之前,這行代碼永遠都不會被執行到, 相當於死代碼, 它就像個定時炸彈躺着那裏, 一動不動至少有5年了!
現在終於等來了被觸發的一刻:雖然我們的這次改動離這個炸彈極其遙遠, 但的確會導致程序會在某種情況下進入這一分支, 於是System.exit(1);  被執行,炸彈爆炸。  JVM悄無聲息的退出了 !
重啓系統, 還會進入這一分支,System.exit,  系統再次退出 :-)  
就這麼周而復始, 把我們這幫碼農戲耍了好幾天  :-(

所以各位同學,以後不要輕易使用System.exit了, 建議你也馬上搜索一下你的項目, 看看有沒有這個炸彈吧。 

掃描二維碼, 關注 coderising 

加入碼農翻身羣135769418:和更多熱愛編程的朋友交流


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章