java內(nèi)存泄漏排查過(guò)程及解決
最近公司生產(chǎn)環(huán)境里面一個(gè)服務(wù)的一直在上升,過(guò)一段時(shí)間就要觸發(fā)報(bào)警,重啟也只能暫時(shí)緩解,由于還沒(méi)有OOM,猜測(cè)可能是內(nèi)存泄漏了。
內(nèi)存泄漏
內(nèi)存泄漏是Java應(yīng)用中常見(jiàn)的問(wèn)題,指對(duì)象已經(jīng)不再被使用,但由于被意外引用而無(wú)法被垃圾回收器(GC)回收,導(dǎo)致內(nèi)存占用持續(xù)增長(zhǎng),最終可能引發(fā)OOM(OutOfMemoryError)錯(cuò)誤。
內(nèi)存問(wèn)題排查
還是采用常規(guī)的辦法,八股文面試必問(wèn)。
1.查看JVM內(nèi)存配置
查看內(nèi)存中對(duì)象的數(shù)量和大小,判斷是否在合理的范圍,如果在合理的范圍內(nèi),增大內(nèi)存配置,調(diào)整內(nèi)存比例就可以了。
查詢一下那個(gè)服務(wù)的pid進(jìn)程號(hào),根據(jù)進(jìn)程號(hào)查詢。
jmap -heap pid
可以看出 老年代的使用率已經(jīng)非常高了。
2.分析gc是否正常執(zhí)行
jstat -gcutil 1000
S0 — Heap上的 Survivor space 0 區(qū)已使用空間的百分比 S1 — Heap上的 Survivor space 1 區(qū)已使用空間的百分比 E — Heap上的 Eden space 區(qū)已使用空間的百分比 O — Heap上的 Old space 區(qū)已使用空間的百分比 M — 元空間 區(qū)已使用空間的百分比 YGC — 從應(yīng)用程序啟動(dòng)到采樣時(shí)發(fā)生 Young GC 的次數(shù) YGCT– 從應(yīng)用程序啟動(dòng)到采樣時(shí) Young GC 所用的時(shí)間(單位秒) FGC — 從應(yīng)用程序啟動(dòng)到采樣時(shí)發(fā)生 Full GC 的次數(shù) FGCT– 從應(yīng)用程序啟動(dòng)到采樣時(shí) Full GC 所用的時(shí)間(單位秒) GCT — 從應(yīng)用程序啟動(dòng)到采樣時(shí)用于垃圾回收的總時(shí)間(單位秒) LGCC - 進(jìn)行GC的原因(低版本jdk可能沒(méi)有這一列)
3.導(dǎo)出 dump 各種工具分析
以文件方式導(dǎo)出 jvm 內(nèi)存使用情況:
jmap -dump:live,format=b,file=xxxx.hprof pid
4.工具分析dump
jvm 分析工具有很多,我這里使用idea自帶的小儀表盤(pán),無(wú)需單獨(dú)下載,可以直接使用,小儀表盤(pán)的名字叫Profiler,功能比較強(qiáng)大,最好使用idea2023以后的版本。
打開(kāi)dump 文件:
打開(kāi)后頁(yè)面如下:
查找一下大對(duì)象:
快速找出耗內(nèi)存大對(duì)象:
根據(jù)大對(duì)象直接定位到具體的代碼:
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
JavaWeb實(shí)現(xiàn)郵件發(fā)送接收功能
這篇文章主要為大家詳細(xì)介紹了JavaWeb郵件發(fā)送接收功能的實(shí)現(xiàn),郵件發(fā)送和接收功能是非常常用的功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2015-12-12在SpringBoot項(xiàng)目中利用maven的generate插件
今天小編就為大家分享一篇關(guān)于在SpringBoot項(xiàng)目中利用maven的generate插件,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-01-01Spring中bean對(duì)象的裝配方式、作用域及生命周期詳解
這篇文章主要介紹了Spring中bean對(duì)象的裝配方式、作用域及生命周期詳解,SprignBoot中?@Bean?完美的替換了了上面的這種在xml中配置的方法,使用以下方法就能讓spring在需要自動(dòng)創(chuàng)建Info對(duì)象時(shí),自動(dòng)調(diào)用這個(gè)方法,需要的朋友可以參考下2023-11-11SpringCloud Feign 服務(wù)調(diào)用的實(shí)現(xiàn)
Feign是一個(gè)聲明性web服務(wù)客戶端。本文記錄多個(gè)服務(wù)之間使用Feign調(diào)用,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-01-01Java微信二次開(kāi)發(fā)(三) Java微信各類型消息封裝
這篇文章主要為大家詳細(xì)介紹了Java微信二次開(kāi)發(fā)第三篇,Java微信各類型消息封裝,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-04-04java實(shí)現(xiàn)小型局域網(wǎng)群聊功能(C/S模式)
這篇文章主要介紹了java利用TCP協(xié)議實(shí)現(xiàn)小型局域網(wǎng)群聊功能(C/S模式) ,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-08-08基于Mybatis plus 自動(dòng)代碼生成器的實(shí)現(xiàn)代碼
本文通過(guò)實(shí)例代碼給大家介紹了基于Mybatis-plus 自動(dòng)代碼生成器的相關(guān)知識(shí),非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-05-05Java后端長(zhǎng)時(shí)間無(wú)操作自動(dòng)退出的實(shí)現(xiàn)方式
這篇文章主要介紹了Java后端長(zhǎng)時(shí)間無(wú)操作自動(dòng)退出的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01