e.printStackTrace()不是列印嗎,還能鎖死?

2020-12-23 酷扯兒

本文轉載自【微信公眾號:java進階架構師,ID:java_jiagoushi】經微信公眾號授權轉載,如需轉載與原文作者聯繫

e.printStackTrace()

會導致鎖死?這僅僅是列印啊,怎麼可能?

先別驚呼不可能,且聽我細細道來。

先看截圖1:

注意右下角區域,紅框部分。這塊內存是什麼呢?非堆!那麼,左邊是代碼緩存區內存,右邊紅框就是字符串池,常量,基本類型數據的內存區。然後呢?已經滿了。什麼原因呢?

滿了的後果呢?整個web服務,訪問之後,沒響應了,就當是卡死掉了。

再來看截圖2:

看看有多少web的請求線程,被卡住在列印這一步!原因呢?要列印字符串輸出到控制臺上,那你字符串常量池所在的內存塊要有空間啊。然而,因為e.printStackTrace() 語句要產生的字符串記錄的是堆棧信息,太長太多,內存被填滿了!注意 上面代碼語句:4208行!

來看圖3:

沒毛病,沒沒事兒找事兒冤枉誰。就是這句代碼惹的禍!當然,我承認,被 try 住的代碼本身就有問題,導致很多調用都會拋異常。

那麼,讓我們再來理理整個事件產生的經過:

-> 短時間內大量請求訪問此接口

-> 代碼本身有問題,很多情況下拋異常

-> e.printStackTrace() 來列印異常到控制臺

-> 產生錯誤堆棧字符串到字符串池內存空間

-> 此內存空間一下子被佔滿了

-> 開始在此內存空間產出字符串的線程還沒完全生產完整,就沒空間了

-> 大量線程產出字符串產出到一半,等在這兒(等有內存了繼續搞啊)

-> 相互等待,等內存,鎖死了,整個應用掛掉了。

總結

總結當然重要,有3點:

1.代碼質量啊親,代碼不拋異常咱不就能愉快地繼續浪麼?

2.不要使用

啊,這玩意兒,在項目發布後,除過不斷的刷控制臺,並沒用什麼卵用啊,您到是用log對象輸出到日誌文件裡面啊。

3.推及開來,在java中,會產生大量字符串的方法,使用時,一定得悠著點,別一不小心撐到肚子(字符串池所屬的那麼點非堆內存空間),撐到肚子了,會死的啊。

相關焦點

  • Java開發之log日誌的使用儘量不用e.printStackTrace
    談到log日誌,小編建議初學java的朋友使用框架集成的log4j、logback這類統一列印日誌,儘量不使用catch的e.printStackTrace(),為什麼呢?下面我們來做簡單介紹。為什麼儘量不用e.printStackTrace直接用e.printStackTrace來列印日誌有錯嗎?當然不錯,但是不好。
  • 詹姆斯被熱火鎖死?醒醒吧,只怕熱火這一招,湖人還能紳士橫掃?
    詹姆斯被熱火鎖死?醒醒吧,只怕熱火這一招,湖人還能紳士橫掃?詹姆斯總決賽面對老東家熱火,想想也是帶勁呀!一哥不僅還有油,還能迷惑人!有人就說了:詹姆斯將被熱火鎖死!好大的口氣呀,我趕緊問了:熱火拿什麼鎖死季後賽第一人?這位朋友就說到:詹姆斯面對伊戈達拉吃了不少苦頭,伊戈達拉的FMVP就是從詹姆斯身上拿到的!
  • 吃雞遊戲驚現鎖血掛,還能保全隊不死?網友:掛都做得這麼高級?
    在絕地求生大火的時候很多玩家都被外掛困擾,其中有個最讓人頭疼的外掛相信很多人記憶猶新,開掛的玩家殺不死秒復活,連韋神都曾遇到過被其搞得沒脾氣,這就是赫赫有名的"鎖血掛"。
  • 福特研發3D列印鎖緊螺母 可防範車輪被盜
    其中一種防止車輪被盜的方法是在每個車輪上用一個鎖緊螺母,而鎖緊螺母需要特殊的適配器或螺栓才可鬆開。不過,即便如此,該方法也並非無懈可擊。因此,福特汽車公司的工程師們採用了3D列印技術,研發了獨特的車輪鎖緊螺母。
  • 福特開發的輪鎖將您的聲音用作3D列印圖案
    福特開發的輪鎖將您的聲音用作3D列印圖案輪鎖是制止盜賊的絕妙工具,但並非完美工具。但是,在輪鎖安全性方面,福特似乎已經提高了賭注。最新的迭代使用來自所有者聲音的聲波來創建獨特的3D可列印圖案。歐洲福特周二表示,這種方法很像使用虹膜或指紋來增強生活中其他部分的安全性。
  • 「內卷」不是惡性競爭,而是自我鎖死
    如果內卷就是指惡性競爭,你卻不說惡性競爭,非要說這麼個你一知半解的學術名詞,是因為裝逼的需要嗎?還有人抖機靈說,「內卷」就是你在電影院看電影,第一排有人站起來了,後面人為了不被擋著,所以也跟著站起來,到最後,影院裡所有人都不得不站起來,這就叫「內卷」。我笑了。
  • 福特利用聲波及3D列印技術 打造輪胎防盜鎖緊螺母
    福特汽車的工程師們另闢蹊徑,採用3D列印技術,研發了獨特的車輪鎖緊螺母,徹底杜絕盜竊輪胎情形的發生。據悉,福特與增材製造高端解決方案領先供應商EOS合作,根據駕駛員的聲音設計了鎖緊螺母的輪廓。通過錄製駕駛員獨特的聲音,利用聲波在電腦軟體上合成獨特的聲波。隨後列印軟體採集聲波的數據,生成獨特的縮進螺母的凹痕和螺栓。
  • Naval Group和Centrale Nantes3D列印全球首個空心螺旋槳葉片
    中國3D列印網2月12日訊,去年,我們報導了法國國防承包商海軍集團與法國工程學院Centrale Nantes合作,開發了全球第一臺全尺寸3D列印軍用螺旋槳,現在同樣的合作也產生了世界上第一臺3D列印空心螺旋槳葉片。
  • 連雲港2020:被「鎖死」的學區房
    參照上圖,被「鎖死」的學區集中在老新浦區。一直以來,老新浦區是連雲港的教育強區,區域名校雲集。目前除了解放路小學,老新浦區幾乎都被覆蓋。 那麼解放路小學,會不會加入「鎖學區」大軍? 無法預知。不過為了安全起見,早點買還是穩妥點,挑挑選選的機會也多些。
  • E-jet列印微納製造系統:防水&可變視場仿生人工複眼製造
    (a)E-jet列印系統以及用於製造分級微/納米液滴的穩定錐射流列印和電噴霧列印模式的原理圖。(b)在柔性PDMS薄膜上微納分級透鏡陣列的製造過程。(c)基於集成微流控晶片輔助的柔性微透鏡陣列薄膜製備可變視場的人工複眼。
  • 德國e郵寶問題攻略
    1.德國e郵寶是和德國郵政合作的嗎?答:不是。
  • 雙子星鎖死球隊上升空間,大巴黎未來會改變陣容嗎?
    主教練圖赫爾的帥位也不是太穩,上賽季被曼聯史詩級逆轉後,圖赫爾雖然留任,卻也立下了本賽季必拿歐冠的軍令狀,現在任務沒完成,換帥再度被提上議程,目標人選是前尤文圖斯主帥阿萊格裡。2017年夏天巴黎聖日耳曼砸下四億歐元購入內馬爾與姆巴佩,就此完成了從普通豪門到頂級豪門的轉變,與此同時,這對雙子星卻也鎖死了球隊的上升空間,本賽季打進決賽,差不多就已是極限。
  • XTreeE 2024年奧運會巴黎3D列印人行橋
    該項目結合了互補的專業技術知識,為在控制成本和期限內實現複雜的建築和結構3D列印混凝土元素以及開發定製解決方案鋪平了道路。對於如此大規模的第一個項目-至少就人行天橋而言-利用3D結構混凝土列印,建築業進入了工業化4.0時代。
  • 看Darktrace如何用AI抓黑客,兩位女性CEO寫下創舉
    幸好,該賭場在幾個月前,決定與一家名為Darktrace的網絡安全公司合作,該公司迅速的發現這個防黑破口,提前終止了一場災難的發生。 Darktrace的系統,是藉由人體的免疫系統作為萌生想法根據,該系統可以在雲計算、網際網路或電力設備中運行,抵禦利用物聯網設備的連接攻擊公司網絡的威脅。
  • 499元手持印表機 竟然還能列印紋身?
    相信很多已經工作的小夥伴都希望有一臺屬於自己的印表機,或者有一臺便籤印表機,能夠用來列印一些小標籤。近日,小米有品眾籌上架了一款億瓦PrintPods手持DIY印表機,主機+墨盒眾籌價499元,五種墨盒單獨售價299元。這款印表機十分小巧便攜,可以直接放入口袋。
  • 英雄聯盟手遊鎖區解決方法 英雄聯盟手遊鎖區怎麼辦
    鎖區公告最近玩英雄聯盟手遊的玩家都在問,遊戲裡面即將鎖區怎麼辦?據悉,lol手遊將於11月11號實行鎖區政策,這個消息對國內藉助梯子遊玩的召喚師們無疑是一個噩耗,很多玩家都不知道怎麼辦了,那麼以後還能玩嗎?小編我特意整理了相關的資訊,下面就是lol手遊鎖區解決方法介紹了,一起來看看吧!
  • 無解的選擇題——鎖三井,還是鎖櫻木?
    其實井上對這個問題已經給出了答案——不是山王不想利用這點,而是我們被櫻木的前場籃板吸引了大部分注意力,忘記了櫻木「覺醒」的另一半效果是,湘北在他跟赤木的聯手下,已經基本鎖死了禁區。當然,你可能又會質疑,為什麼這時候不讓深津打宮城——深津不是打了一回合嗎?
  • 穆雷被鎖死約基奇孤木難支 這次掘金還能翻盤嗎
    這已經是掘金隊今年季後賽第二次面臨1-3落後的局面了,首輪他們曾經連贏3場淘汰爵士隊,成為NBA歷史上第12支1-3落後完成翻盤的球隊,那麼這一次,掘金隊還有希望複製自己創下的奇蹟嗎?而他的最好幫手,首輪兩次砍下50+的穆雷,目前卻被快船隊的貝弗利、喬治和倫納德用車輪防守完全鎖死。此役穆雷出戰44分鐘,但15投6中只得到了18分,本輪系列賽,除了第二戰穆雷拿到了27分之外,剩餘3場球他都表現欠佳,而且投籃命中率都低得離譜(首戰15投5中,第三戰17投5中)。
  • 分布式鎖解決方案-Redis
    ## 為什麼要學習分布式鎖解決方案為了解決分布式架構帶來的數據準確性問題!我們用synchronized或者 ReentrantLock(瑞恩吹特) 能解決問題嗎?真實生產環境我們採用集群的方式去訪問秒殺商品(nginx為我們做了負載均衡)。