中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2022-01-04 09:46:22 來源:億速云 閱讀:908 作者:小新 欄目:云計算

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

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

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

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

在這種情況下,如果使用 java jvisualvm 來查看內存使用情況,你會發現下圖中最右側的非堆區域,也就是字符串常量池已經滿了!  

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

在接著查看線程信息。  

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

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

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

確實是 e.printStackTrace() 的鍋。

那么該怎么解決呢?

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

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

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

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

肇源县| 探索| 宁波市| 襄垣县| 新郑市| 宜州市| 稷山县| 嘉定区| 福鼎市| 永安市| 巴彦淖尔市| 阿拉善左旗| 凤翔县| 自贡市| 西华县| 清徐县| 祥云县| 界首市| 类乌齐县| 铜梁县| 平陆县| 郎溪县| 乐业县| 建德市| 南丰县| 团风县| 宜良县| 磐石市| 扬中市| 合肥市| 金溪县| 祁阳县| 五河县| 屏南县| 河津市| 英吉沙县| 大方县| 庆城县| 桂阳县| 郓城县| 巍山|