今天想起來一件好玩的事, 給大家分享下。
事情發生在幾年前, 那時候大家忙活完一個新需求, 終於上線了, 都想鬆一口氣。
可是很快就發生了一件令人抓狂的事情, 剛上線的系統總是莫名其妙的崩潰, 每次都得重啓才能解決。
更要命的是完全摸不到規律, 系統運行着運行着就down了, 毫不留情面。
趕緊組織人員檢查, 開發人員拍着胸脯, 信心滿滿: 肯定不是我們的問題! 先查查是不是環境的問題!
內存使用, 正常 。
硬盤空間,正常。
檢查日誌, 正常, 更找不到什麼OutofMemory。
難道是黑客入侵,工程師仔細檢查系統日誌,也沒有什麼蛛絲馬跡。 我們的系統也不涉及到錢, 根本不值得入侵。
可是系統總是那麼靜悄悄的,冷酷的down機, 快把大家都逼瘋了。
如果是你該怎麼辦?
懷疑了一圈別人的問題以後,最好也懷疑一下自己。
我們就開始嚴格的審查這個新需求新加的,和改動的代碼,10幾雙眼睛不知道看了多少遍, 還是一無所獲。
後來不知道是誰,偶然看到了程序中有這麼一行可怕的代碼: System.exit(1) , 然後趕緊檢查它和這個改動的關係。
果然, 在改動之前,這行代碼永遠都不會被執行到, 相當於死代碼, 它就像個定時炸彈躺着那裏, 一動不動至少有5年了!
現在終於等來了被觸發的一刻:雖然我們的這次改動離這個炸彈極其遙遠, 但的確會導致程序會在某種情況下進入這一分支, 於是System.exit(1); 被執行,炸彈爆炸。 JVM悄無聲息的退出了 !
重啓系統, 還會進入這一分支,System.exit, 系統再次退出 :-)
就這麼周而復始, 把我們這幫碼農戲耍了好幾天 :-(
所以各位同學,以後不要輕易使用System.exit了, 建議你也馬上搜索一下你的項目, 看看有沒有這個炸彈吧。
掃描二維碼, 關注 coderising
加入碼農翻身羣135769418:和更多熱愛編程的朋友交流