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

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

創(chuàng)新互聯(lián)建站成都網(wǎng)站建設按需網(wǎng)站開發(fā),是成都網(wǎng)站開發(fā)公司,為成都格柵板提供網(wǎng)站建設服務,有成熟的網(wǎng)站定制合作流程,提供網(wǎng)站定制設計服務:原型圖制作、網(wǎng)站創(chuàng)意設計、前端HTML5制作、后臺程序開發(fā)等。成都網(wǎng)站改版熱線:13518219792

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

從方法 printStackTrace 自注釋上來看,該方法是輸出打印異常的堆棧跟蹤信息的。由于,我們從學習 Hello World 的那一天開始,老師就是使用 printStackTrace 輸出錯誤日志的,導致很多人一直錯誤的使用它并沿用至今!

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

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

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

在接著查看線程信息。  

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

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

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

確實是 e.printStackTrace() 的鍋。

那么該怎么解決呢?

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

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

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

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

當前標題:java中使用e.printStackTrace()輸出日志讓系統(tǒng)崩掉怎么辦
網(wǎng)頁URL:http://bm7419.com/article32/igshsc.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版外貿(mào)網(wǎng)站建設、小程序開發(fā)、定制開發(fā)、關鍵詞優(yōu)化用戶體驗

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應式網(wǎng)站建設