一行程式碼引發的”血案“!!!(軟體開發、專案管理、skycto JEEditor)

書寫人生發表於2019-09-07
 
原文連結: https://mp.weixin.qq.com/s/ODicDoxse0K0mByCduxm7Q

轉自:碼農翻身(微訊號:coderising)

今天想起來一件好玩的事, 給大家分享下。

事情發生在幾年前, 那時候大家忙活完一個新需求, 終於上線了, 都想鬆一口氣。

可是很快就發生了一件令人抓狂的事情, 剛上線的系統總是莫名其妙的崩潰, 每次都得重啟才能解決。

更要命的是完全摸不到規律, 系統執行著執行著就down了, 毫不留情面。

趕緊組織人員檢查, 開發人員拍著胸脯, 信心滿滿: 肯定不是我們的問題! 先查查是不是環境的問題!
記憶體使用, 正常 。
硬碟空間,正常。
檢查日誌, 正常, 更找不到什麼OutofMemory。

難道是駭客入侵,工程師仔細檢查系統日誌,也沒有什麼蛛絲馬跡。 我們的系統也不涉及到錢, 根本不值得入侵。

可是系統總是那麼靜悄悄的,冷酷的down機, 快把大家都逼瘋了。

如果是你該怎麼辦?

懷疑了一圈別人的問題以後,最好也懷疑一下自己。

我們就開始嚴格的審查這個新需求新加的,和改動的程式碼,10幾雙眼睛不知道看了多少遍, 還是一無所獲。

後來不知道是誰,偶然看到了程式中有這麼一行可怕的程式碼: System.exit(1) , 然後趕緊檢查它和這個改動的關係。

果然, 在改動之前,這行程式碼永遠都不會被執行到, 相當於死程式碼,它就像個陷阱躺著那裡, 一動不動至少有5年了!

現在終於等來了被觸發的一刻:雖然我們的這次改動離這個 陷阱極其遙遠, 但的確會導致程式會在某種情況下進入這一分支, 於是System.exit(1); 被執行, 陷阱觸發。 JVM悄無聲息的退出了 !

重啟系統, 還會進入這一分支,System.exit, 系統再次退出 ?

就這麼週而復始, 把我們這幫碼農戲耍了好幾天 ?

所以各位同學,以後不要輕易使用System.exit了, 建議你也馬上搜尋一下你的專案, 看看有沒有System.exit這個 陷阱吧。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69947338/viewspace-2656366/,如需轉載,請註明出處,否則將追究法律責任。

相關文章