JVM堆內(nèi)存溢出和內(nèi)存泄露問題定位和解決

上一篇 <<<JVM元空間(方法區(qū))和棧內(nèi)存溢出原因及解決方案
下一篇 >>>JVM常見死鎖問題產(chǎn)生原因和多種診斷方式


1.錯誤現(xiàn)象

泄露:java.lang.OutOfMemoryError: GC overhead limit exceeded
溢出:java.lang.OutOfMemoryError: Java heap space

2.內(nèi)存溢出和內(nèi)存泄露區(qū)別

內(nèi)存溢出:是在申請內(nèi)存空間時,超出最大堆內(nèi)存空間物邑,系統(tǒng)給不了
內(nèi)存泄露:使用過的內(nèi)存沒有及時清理猴凹,長時間占用內(nèi)存扔亥,最終導(dǎo)致內(nèi)存耗盡溢出帆竹『技澹【靜態(tài)常量太多哼拔、IO流等不關(guān)閉都會導(dǎo)致】

3.如何判斷

jstat命令可查看堆的使用情況及垃圾回收情況概行。
用法:jstat –gcutil pid
S0 S1 E 為新生代
O為老年代
M是元區(qū)間(方法區(qū))
YGC新生代執(zhí)行次數(shù)
YGCT新生代執(zhí)行時間
FGC老年代執(zhí)行次數(shù)
FGCT老年代執(zhí)行時間
GCT總垃圾回收時間(單位秒)

3.1內(nèi)存溢出

a.jstat效果

代碼中有大對象被引用盖呼,內(nèi)存溢出后會立馬被回收掉儒鹿,不會影響其他接口


b.代碼演示

@GetMapping("/oom")
public String cms() {
    List<byte[]> bytes = new ArrayList<>();

    while (true) {
        byte[] bytes1 = new byte[1024 * 1024 * 4];
        bytes.add(bytes1);
        try {
            Thread.sleep(1);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

3.2內(nèi)存泄露

a.jstat效果

程序中有大對象,GC沒辦法回收几晤,所以E和O特別高挺身,會影響到代碼的其他接口


b.代碼演示

private List<byte[]> bytes = new ArrayList<>();
@GetMapping("/memoryLeak")
public String oom() {

    while (true) {
        byte[] bytes1 = new byte[1024 * 1024 * 4];
        bytes.add(bytes1);
        try {
            Thread.sleep(1);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

4.如何定位問題點

4.1 內(nèi)存快照打印

方式一:啟動腳本增加配置
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/Users/jarye/Downloads/heapdump.dump
方式二:jmap命令
jmap -dump:format=b,file=#輸出dump地址 pid
例如:jmap -dump:format=b,file=/Users/jarye/Downloads/a.dump 8625

tips:生產(chǎn)服務(wù)器千萬不要打,每次打的時候锌仅,所有的程序都會停止掉章钾,而且差不多是有物理內(nèi)存的1/5大小,16G的會產(chǎn)生3G左右的快照热芹。

4.2 內(nèi)存快照文件導(dǎo)入jdk自帶的jvisualvm工具贱傀,即可看到錯誤


內(nèi)存溢出



內(nèi)存泄露


4.3 內(nèi)存快照文件導(dǎo)入JProfile工具,比jvisualvm排查更直觀伊脓。

5.解決方案

合理調(diào)整堆的初始值府寒、最大值、以及堆中的新生代报腔、老年代比例等株搔。詳情見:JVM性能調(diào)優(yōu)的評估指標(biāo)及調(diào)優(yōu)示例

a、內(nèi)存溢出:加內(nèi)存
b纯蛾、內(nèi)存泄露:加內(nèi)存纤房、減少變量的使用范圍以達到盡快釋放回收


相關(guān)文章鏈接:
<<<JVM整體內(nèi)存結(jié)構(gòu)的圖解,直觀明了
<<<javap命令查看對象信息及操作方法在JVM層的實現(xiàn)原理
<<<javap命令反查匯編指令匯總
<<<ClassLoader類加載器順序Demo測試與雙親委派源碼解讀
<<<自定義SPI和熱部署技術(shù)破壞類加載器的雙親委派模式
<<<JVM中對象如何完成空間分配和初始化工作
<<<JVM元空間(方法區(qū))和棧內(nèi)存溢出原因及解決方案
<<<JVM常見死鎖問題產(chǎn)生原因和多種診斷方式
<<<服務(wù)器CPU飆升為100%問題排查及如何避免
<<<JVM內(nèi)存診斷命令和排查工具匯總
<<<JVM新生代老年代算法匯總圖解
<<<JVM垃圾回收不要手動System.gc的真正原因
<<<JVM垃圾回收引用計數(shù)法和根搜索算法圖解
<<<JVM垃圾回收STW(Stop-The-World)代碼演示
<<<JVM垃圾回收器的發(fā)展歷程及使用場景匯總
<<<JVM串行并行垃圾回收器的關(guān)注點
<<<一張圖看懂CMS垃圾回收器的底層原理
<<<G1能作為JDK9默認(rèn)垃圾回收器的優(yōu)勢分析
<<<CMS和G1的漏標(biāo)問題解決及三色標(biāo)記算法圖解
<<<GC中新生代進入老年代的方式匯總
<<<GC常用日志參數(shù)配置及分析工具說明
<<<FullGC翻诉、MinorGC炮姨、STW等常見問題如何解答
<<<JVM性能調(diào)優(yōu)的評估指標(biāo)及調(diào)優(yōu)示例

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市碰煌,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌芦圾,老刑警劉巖蛾派,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件洪乍,死亡現(xiàn)場離奇詭異河闰,居然都是意外死亡姜性,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進店門豌研,熙熙樓的掌柜王于貴愁眉苦臉地迎上來晶衷,“玉大人温眉,你說我怎么就攤上這事类溢∩咭” “怎么了?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵伯顶,是天一觀的道長锥涕。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么峭梳? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任舰绘,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘捂寿。我一直安慰自己口四,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布秦陋。 她就那樣靜靜地躺著蔓彩,像睡著了一般。 火紅的嫁衣襯著肌膚如雪驳概。 梳的紋絲不亂的頭發(fā)上赤嚼,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天,我揣著相機與錄音抡句,去河邊找鬼探膊。 笑死,一個胖子當(dāng)著我的面吹牛待榔,可吹牛的內(nèi)容都是我干的逞壁。 我是一名探鬼主播,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼锐锣,長吁一口氣:“原來是場噩夢啊……” “哼腌闯!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起雕憔,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤姿骏,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后斤彼,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體分瘦,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年琉苇,在試婚紗的時候發(fā)現(xiàn)自己被綠了嘲玫。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡并扇,死狀恐怖去团,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情穷蛹,我是刑警寧澤土陪,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站肴熏,受9級特大地震影響鬼雀,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蛙吏,卻給世界環(huán)境...
    茶點故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一取刃、第九天 我趴在偏房一處隱蔽的房頂上張望蹋肮。 院中可真熱鬧出刷,春花似錦璧疗、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至坷檩,卻和暖如春却音,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背矢炼。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工系瓢, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人句灌。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓夷陋,卻偏偏與公主長得像,于是被迫代替她去往敵國和親胰锌。 傳聞我的和親對象是個殘疾皇子骗绕,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,834評論 2 345

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