溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

java中使用e.printStackTrace()輸出日志讓系統(tǒng)崩掉怎么辦

發(fā)布時(shí)間:2022-01-04 09:46:22 來(lái)源:億速云 閱讀:891 作者:小新 欄目:云計(jì)算

這篇文章主要介紹java中使用e.printStackTrace()輸出日志讓系統(tǒng)崩掉怎么辦,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

聊一個(gè)你可能會(huì)經(jīng)常犯的一個(gè)錯(cuò)誤!使用 e.printStackTrace() 輸出日志是怎樣讓系統(tǒng)崩掉的!

從方法 printStackTrace 自注釋上來(lái)看,該方法是輸出打印異常的堆棧跟蹤信息的。由于,我們從學(xué)習(xí) Hello World 的那一天開(kāi)始,老師就是使用 printStackTrace 輸出錯(cuò)誤日志的,導(dǎo)致很多人一直錯(cuò)誤的使用它并沿用至今!

printStackTrace 嚴(yán)重的來(lái)說(shuō),它可能會(huì)導(dǎo)致我們的系統(tǒng)崩潰。因?yàn)?,e.printStackTrace() 在打印異常到控制臺(tái)時(shí),會(huì)將產(chǎn)生錯(cuò)誤堆棧字符串存入到字符串池內(nèi)存空間,如果此時(shí)的空間比較小,并且異常多,此內(nèi)存空間可能一下子就被占滿了,并且有些在此內(nèi)存空間產(chǎn)出字符串的線程還沒(méi)完全生產(chǎn)完整,就沒(méi)空間了,導(dǎo)致大量線程產(chǎn)出字符串產(chǎn)出到一半,都等在這了,相互等待,等空閑內(nèi)存,最終會(huì)拋出 OOM,導(dǎo)致整個(gè)應(yīng)用掛掉。

在這種情況下,如果使用 java jvisualvm 來(lái)查看內(nèi)存使用情況,你會(huì)發(fā)現(xiàn)下圖中最右側(cè)的非堆區(qū)域,也就是字符串常量池已經(jīng)滿了!  

java中使用e.printStackTrace()輸出日志讓系統(tǒng)崩掉怎么辦

在接著查看線程信息。  

java中使用e.printStackTrace()輸出日志讓系統(tǒng)崩掉怎么辦

你會(huì)發(fā)現(xiàn),大量的線程被卡在了異常輸出的位置。通過(guò)具體的行號(hào)信息,查看源碼。  

java中使用e.printStackTrace()輸出日志讓系統(tǒng)崩掉怎么辦

確實(shí)是 e.printStackTrace() 的鍋。

那么該怎么解決呢?

1、提高代碼質(zhì)量,從源頭解決。先解決為什么會(huì)拋異常。
2、增加內(nèi)存,增加非堆內(nèi)存,增加字符串常量池的內(nèi)存。
3、禁止使用 e.printStackTrace() 輸出日志。
4、提升系統(tǒng)的容錯(cuò)能力。

除此之外,e.printStackTrace() 是將日志輸出到控制臺(tái),如果我想將日志輸出到文件,或者第三方服務(wù)器上,它就無(wú)能為力了。而如果你的系統(tǒng)中大量的使用了 e.printStackTrace(),那么改動(dòng)的時(shí)間和代價(jià)就太大了!

另外,也有不少人喜歡使用 System.out.println() 輸出日志。我也非常不建議,去年我還寫(xiě)過(guò)一篇關(guān)于 System.out.println 危險(xiǎn)性的文章。不知道大家是否還記得?  都 9102 了,你還不知道 System.out.println 的危害!

以上是“java中使用e.printStackTrace()輸出日志讓系統(tǒng)崩掉怎么辦”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI