jvm解決內(nèi)存溢出問題

問題:

報錯為java.lang.OutOfMemoryError幔亥,內(nèi)存溢出。根據(jù)報錯并不容易定位問題玖像,因為內(nèi)存溢出的位置不一定就是報錯位置紫谷。而是程序運行到報錯行那一刻,產(chǎn)生了內(nèi)存溢出捐寥。為了定位問題笤昨,我們需要工具。


image.png

問題定位

關于內(nèi)存溢出握恳,常見bug如下:
1.內(nèi)存中加載的數(shù)據(jù)量過于龐大瞒窒,如一次從數(shù)據(jù)庫取出過多數(shù)據(jù);
2.集合類中有對對象的引用乡洼,使用完后未清空崇裁,使得JVM不能回收;
3.代碼中存在死循環(huán)或循環(huán)產(chǎn)生過多重復的對象實體束昵;
4.使用的第三方軟件中的BUG拔稳;
5.啟動參數(shù)內(nèi)存值設定的過小锹雏;

為了定位問題巴比,我們需要知道在jvm內(nèi)存中的各個對象所占用的實際內(nèi)存是多少。
jdk包內(nèi)為我們提供很多的命令工具來幫助我們解決問題礁遵。如下圖所示:


image.png

這些exe文件主要包括用于監(jiān)視虛擬機和故障處理的工具轻绞,這些故障處理的工具被SU公司作為“禮物”附贈給jdk的使用者,并在軟件的使用說明中把它們聲明為“沒有技術支持的實驗性質(zhì)的產(chǎn)品”佣耐,但事實上這些工具都非常穩(wěn)定且強大政勃,能在處理應用程序的性能問題、定位故障時發(fā)揮巨大作用兼砖。

1.定位進程號

首先我們通過cmd命令行轉(zhuǎn)到我們的jdk的bin目錄下奸远,輸入jps -l 查看當前運行的所有進程號(pid)既棺。


image.png

2查詢指定線程的內(nèi)存狀態(tài)

語句:jmap -heap [pid]


image.png

3查看JVM堆中對象詳細占用情況

語句:jmap -heap


image.png

4生成dump文件

用jmap -heap查看并不直觀,我們可以生成一個dump文件作為快照懒叛,即保存了歷史內(nèi)存情況援制,又可以用工具分析內(nèi)存占用情況。
語句:jmap -dump:format=b,file=文件名 [pid]


image.png

生成位置默認就在jdk的bin目錄下芍瑞。

利用MAT進行分析dump文件,下面是MAT安裝教程
在Eclipse help -> Eclipse Marketplace下搜索Memory:

image.png

安裝后打開導出的文件:
1褐墅、打開MAT面板

image.png

2.打開導出文件


image.png

3.找到我們的dump文件就可以查看了


image.png

image.png

5.jdk內(nèi)置的實時內(nèi)存監(jiān)控

在jdk的bin目錄下拆檬,還有一個功能強大的軟件,jvisualvm
打開它妥凳,并找到程序所屬的線程就可以實時監(jiān)控內(nèi)存情況了竟贯。


image.png

問題解決

通過對dump文件分析,發(fā)現(xiàn)byte數(shù)組所占哦那個的內(nèi)存空間過大逝钥。
image.png
image.png

而程序中除了正常的channel.write(),只有在read中存在new出來的byte數(shù)組屑那。

image.png

嘛,差不多了艘款。

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末持际,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子哗咆,更是在濱河造成了極大的恐慌蜘欲,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件晌柬,死亡現(xiàn)場離奇詭異姥份,居然都是意外死亡,警方通過查閱死者的電腦和手機年碘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進店門澈歉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人屿衅,你說我怎么就攤上這事埃难。” “怎么了傲诵?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵凯砍,是天一觀的道長。 經(jīng)常有香客問我拴竹,道長悟衩,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任栓拜,我火速辦了婚禮座泳,結果婚禮上惠昔,老公的妹妹穿的比我還像新娘。我一直安慰自己挑势,他們只是感情好镇防,可當我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著潮饱,像睡著了一般来氧。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上香拉,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天啦扬,我揣著相機與錄音,去河邊找鬼凫碌。 笑死扑毡,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的盛险。 我是一名探鬼主播瞄摊,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼苦掘!你這毒婦竟也來了换帜?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤鸟蜡,失蹤者是張志新(化名)和其女友劉穎膜赃,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體揉忘,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡跳座,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了泣矛。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片疲眷。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖您朽,靈堂內(nèi)的尸體忽然破棺而出狂丝,到底是詐尸還是另有隱情,我是刑警寧澤哗总,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布几颜,位于F島的核電站,受9級特大地震影響讯屈,放射性物質(zhì)發(fā)生泄漏蛋哭。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一涮母、第九天 我趴在偏房一處隱蔽的房頂上張望谆趾。 院中可真熱鬧躁愿,春花似錦、人聲如沸沪蓬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽跷叉。三九已至逸雹,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間云挟,已是汗流浹背峡眶。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留植锉,地道東北人。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓峭拘,卻偏偏與公主長得像俊庇,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子鸡挠,可洞房花燭夜當晚...
    茶點故事閱讀 43,486評論 2 348

推薦閱讀更多精彩內(nèi)容