最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java頻繁GC的完整排查流程與解決方法

 更新時間:2026年06月03日 09:27:33   作者:碼不停蹄的玄黓  
這篇文章主要介紹了Java中頻繁GC的常見問題及其解決步驟,涵蓋內(nèi)存泄漏、堆內(nèi)存不足、大對象創(chuàng)建等問題的排查與處理方法,通過實際操作指導(dǎo)幫助開發(fā)者精準(zhǔn)定位和解決性能問題,需要的朋友可以參考下

頻繁GC 是Java最常見的線上故障之一,直接表現(xiàn):CPU 高、響應(yīng)慢、卡頓、甚至OOM
我給你一套最實用、最快定位的排查步驟,從查看GC情況 → 定位原因 → 解決問題,全程不猜、不重啟。

一、先確認(rèn):是不是真的頻繁GC?

1. 看GC實時狀態(tài)(最關(guān)鍵)

jstat -gc <PID> 1000 10

每1秒輸出一次GC,共10次。

重點看這4列

  • YGC:YoungGC 次數(shù)(每秒漲好幾次 = 頻繁YoungGC)
  • YGCT:YoungGC 總耗時
  • FGC:FullGC 次數(shù)(只要一直在漲 = 嚴(yán)重問題
  • FGCT:FullGC 總耗時

判定標(biāo)準(zhǔn)(線上通用)

  1. FGC 每分鐘 ≥1 次 → 嚴(yán)重頻繁GC,必須立刻處理
  2. YGC 每秒 ≥2 次 → 頻繁YoungGC
  3. GC耗時占比 >10% → 影響業(yè)務(wù)

二、快速判斷:頻繁GC 分 3 種類型

1.頻繁 FullGC(最危險)

癥狀:CPU 高、應(yīng)用卡頓、FGC 瘋狂上漲
原因:內(nèi)存泄漏、堆內(nèi)存不足、大對象、元空間溢出

2.頻繁 YoungGC

癥狀:YGC 很高,但FGC不漲
原因:新生代太小、創(chuàng)建對象太快

3.YoungGC 高 + 慢慢觸發(fā) FullGC

原因:內(nèi)存泄漏(最常見)

三、3步定位頻繁GC根因(實戰(zhàn)流程)

第一步:看堆內(nèi)存使用情況

jmap -heap <PID>

重點看:

  • 堆總配置
  • 老年代使用率
  • 元空間使用率

如果老年代快滿了還在漲 → 內(nèi)存泄漏。

第二步:導(dǎo)出堆快照(定位誰在占用內(nèi)存)

jmap -dump:format=b,file=heap.hprof <PID>

注意:

  • 生產(chǎn)導(dǎo)出時會STW,建議低峰期執(zhí)行
  • 或者加參數(shù):-dump:live,format=b... 只抓存活對象(更快)

第三步:分析堆快照(找泄漏代碼)

用以下工具打開 heap.hprof

  • Eclipse MAT(最強)
  • JProfiler
  • IDEA 自帶 Profiler

你重點找這3類問題

  1. 某個業(yè)務(wù)對象實例數(shù)暴增(內(nèi)存泄漏)
  2. 超大集合(List/Map 只加不刪)
  3. 靜態(tài)變量緩存了大量對象(最常見泄漏點)

四、90% 的頻繁GC 就這 5 種原因

1.內(nèi)存泄漏(最常見)

特征:FGC 越來越頻繁,老年代回收不掉
典型代碼:

  • static Map 不斷put數(shù)據(jù),不清理
  • 線程池使用不當(dāng),ThreadLocal 沒remove
  • 流、連接未關(guān)閉

2.堆內(nèi)存太小

特征:GC 后內(nèi)存依然占滿
解決:加大 -Xmx

3.創(chuàng)建大對象/瞬時對象過多

比如:超大List、批量查詢、JSON序列化
特征:YGC 非常頻繁

4.元空間溢出

特征:FGC,OGF: Metaspace
原因:反射、動態(tài)代理、大量類加載

5.直接內(nèi)存泄漏

NIO/Netty 未釋放直接內(nèi)存,導(dǎo)致頻繁FullGC

五、1分鐘快速排查命令(直接復(fù)制)

# 1. 找Java進程
ps -ef | grep java
# 2. 實時GC監(jiān)控
jstat -gc <PID> 1000
# 3. 看堆內(nèi)存
jmap -heap <PID>
# 4. 導(dǎo)出堆dump
jmap -dump:live,format=b,file=heap.hprof <PID>
# 5. 看線程棧(排查CPU+GC關(guān)聯(lián))
jstack <PID>

六、解決方案(直接對照用)

1. 內(nèi)存泄漏

修復(fù)代碼:

  • 用完的集合清空
  • ThreadLocal 調(diào)用 remove()
  • 關(guān)閉流/連接
  • 緩存加過期、加淘汰策略

2. 新生代太小

-Xmn2g 或調(diào)整 NewRatio

3. 堆太小

-Xms4g -Xmx4g

4. 元空間太小

-XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m

5. 對象創(chuàng)建太快

優(yōu)化批量查詢、減少大對象、異步、緩存

七、最實用的GC排查口訣

FGC頻繁查泄漏,
YGC頻繁看對象,
堆滿就是內(nèi)存漏,
泄漏都在集合里。

總結(jié)

  1. jstat -gc 確認(rèn)頻繁GC
  2. jmap -dump 導(dǎo)出堆
  3. MAT 分析誰占內(nèi)存
  4. 90% 是static集合、ThreadLocal、緩存無回收導(dǎo)致泄漏

以上就是Java頻繁GC的完整排查流程與解決方法的詳細內(nèi)容,更多關(guān)于Java頻繁GC排查與解決的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • java中重載,繼承,重寫和多態(tài)的區(qū)別

    java中重載,繼承,重寫和多態(tài)的區(qū)別

    這篇文章主要介紹了java中重載,繼承,重寫和多態(tài)的區(qū)別,需要的朋友可以參考下
    2014-07-07
  • Spring?AI聊天功能開發(fā)步驟

    Spring?AI聊天功能開發(fā)步驟

    本文給大家介紹Spring?AI聊天功能開發(fā)步驟,首先引入依賴,繼承父版本的springboot依賴,最好是比較新的依賴,結(jié)合實例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧
    2024-04-04
  • 基于Mybatis-Plus攔截器實現(xiàn)MySQL數(shù)據(jù)加解密的示例代碼

    基于Mybatis-Plus攔截器實現(xiàn)MySQL數(shù)據(jù)加解密的示例代碼

    用戶的一些敏感數(shù)據(jù),例如手機號、郵箱、身份證等信息,在數(shù)據(jù)庫以明文存儲時會存在數(shù)據(jù)泄露的風(fēng)險,因此需要進行加密,解密等功能,接下來本文就給大家介紹基于Mybatis-Plus攔截器實現(xiàn)MySQL數(shù)據(jù)加解密,需要的朋友可以參考下
    2023-07-07
  • java 將一個數(shù)組逆序輸出的方法

    java 將一個數(shù)組逆序輸出的方法

    今天小編就為大家分享一篇java 將一個數(shù)組逆序輸出的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • 使用Prometheus+Grafana的方法監(jiān)控Springboot應(yīng)用教程詳解

    使用Prometheus+Grafana的方法監(jiān)控Springboot應(yīng)用教程詳解

    這篇文章主要介紹了用Prometheus+Grafana的方法監(jiān)控Springboot應(yīng)用,本文通過實例代碼詳解給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03
  • 解析Mybatis SqlSessionFactory初始化原理

    解析Mybatis SqlSessionFactory初始化原理

    本文主要介紹了Mybatis SqlSessionFactory初始化原理,文中通過示例代碼介紹的非常詳細,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-07-07
  • IntelliJ IDEA 2019.1.1 for MAC 下載和注冊碼激活教程圖解

    IntelliJ IDEA 2019.1.1 for MAC 下載和注

    這篇文章主要介紹了IntelliJ IDEA 2019.1.1 for MAC 下載和注冊碼激活,教程,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-04-04
  • 基于java實現(xiàn)的ECC加密算法示例

    基于java實現(xiàn)的ECC加密算法示例

    這篇文章主要介紹了基于java實現(xiàn)的ECC加密算法,簡單說明了ECC算法的概念、原理,并結(jié)合實例形式分析了java實現(xiàn)ECC加密算法的定義與使用技巧,需要的朋友可以參考下
    2017-08-08
  • 如何使用Java讀取PPT文本和圖片

    如何使用Java讀取PPT文本和圖片

    這篇文章主要介紹了如何使用Java讀取PPT文本和圖片,本篇文章將介紹通過Java程序來讀取PPT幻燈片中的文本及圖片的方法。讀取圖片時,可讀取文檔中的所有圖片,也可以讀取指定幻燈片當(dāng)中的圖片,需要的朋友可以參考下
    2019-07-07
  • 在Java中操作Zookeeper的示例代碼詳解

    在Java中操作Zookeeper的示例代碼詳解

    這篇文章主要介紹了在Java中操作Zookeeper的示例代碼詳解,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07

最新評論

大城县| 剑阁县| 长垣县| 千阳县| 阿坝| 大宁县| 启东市| 芜湖市| 贵港市| 昭平县| 上饶县| 满洲里市| 舒城县| 东山县| 沈阳市| 辽宁省| 青川县| 龙口市| 扎赉特旗| 伊吾县| 郁南县| 阳朔县| 绥芬河市| 怀仁县| 琼海市| 柳林县| 镇远县| 五大连池市| 丹巴县| 浦东新区| 门源| 株洲县| 合作市| 江阴市| 永顺县| 嘉义市| 嵩明县| 天气| 高密市| 会理县| 昌平区|