記一次不太成功的頻繁 full gc 排查過程
上周自己負(fù)責(zé)的一個應(yīng)用出現(xiàn)頻繁full gc的問題,不得不嘗試優(yōu)化一下。第一次做這種事只能先看看網(wǎng)上的文章,然后親自嘗試怎么去完成減少full gc的頻率,降低young gc的頻率這一目標(biāo)。雖然最終只是勉強(qiáng)解決了,但還是希望記錄下來給下一次積攢經(jīng)驗(yàn)。
1.jps命令查看進(jìn)程id
jps -l
2. jmap命令導(dǎo)出堆轉(zhuǎn)儲文件
jmap -dump:format=b,file=kfwebHeap1016.hprof 35073
3.mat工具分析堆轉(zhuǎn)儲文件



4.G1來了
-XX:+UseG1GC當(dāng)然只是在一臺機(jī)器上作了處理,也便于與其它機(jī)器作對比。
5.MetaSpace調(diào)整
Metadata GC Threshold由于元數(shù)據(jù)空間不足導(dǎo)致的GC.原來在G1中設(shè)置PermSize(永久代大小)已經(jīng)沒用了,取而代之的是MetaSpace參數(shù),雖然這個用的是并非堆內(nèi)存而是機(jī)器的物理內(nèi)存并且最大大小沒有限制,但是默認(rèn)初始大小只有20m,所以要作出調(diào)整:
-XX:MetaspaceSize=128m加了之后果然就沒有出現(xiàn)這個問題了
6. 解決Humongous Allocation
G1 Humongous Allocation這個是由于大型對象分配導(dǎo)致的問題,大型(Humongous)對象是指超過G1的Region 50%的內(nèi)存對象,頻繁大型對象內(nèi)存內(nèi)存分配會導(dǎo)致性能問題,而且如果一個region中大型對象過多的話則最后一個大型對內(nèi)象邊界和該region的邊界之間的空間將不會被使用,如果有多個這樣的region將會導(dǎo)致堆內(nèi)存的碎片化,在jdk1.8u40之前這些大型對象的清理在full gc期間進(jìn)行完成。較新的jvm也是把大型對象放在清理階段,要解決上面的問題有兩種方法。
1.增加region的大小(注意要在1到32m之間并且為2的整數(shù)次冪)
2.增加堆內(nèi)存大小
作者:Acamy
鏈接:https://www.jianshu.com/p/900d7376b8b1
更多精彩: Java實(shí)戰(zhàn)項(xiàng)目視頻,給需要的讀者,收藏!
SpringBoot 如何上傳大文件?
微信支付的軟件架構(gòu)到底有多牛?
Java常用的幾個Json庫,性能強(qiáng)勢對比!
求求你們了,別再寫滿屏的 if/ else 了!
基于Spring+SpringMVC+Mybatis的分布式敏捷開發(fā)系統(tǒng)架構(gòu)(附源碼)
關(guān)注公眾號,查看更多優(yōu)質(zhì)文章
最近,整理一份Java資料《Java從0到1》,覆蓋了Java核心技術(shù)、JVM、Java并發(fā)、SSM、微服務(wù)、數(shù)據(jù)庫、數(shù)據(jù)結(jié)構(gòu)等等。 獲取方式:關(guān)注公眾號并回復(fù)?Java?領(lǐng)取,更多Java內(nèi)容陸續(xù)奉上。
明天見(??ω??)??
更多精彩: Java實(shí)戰(zhàn)項(xiàng)目視頻,給需要的讀者,收藏! SpringBoot 如何上傳大文件? 微信支付的軟件架構(gòu)到底有多牛? Java常用的幾個Json庫,性能強(qiáng)勢對比! 求求你們了,別再寫滿屏的 if/ else 了! 基于Spring+SpringMVC+Mybatis的分布式敏捷開發(fā)系統(tǒng)架構(gòu)(附源碼) 關(guān)注公眾號,查看更多優(yōu)質(zhì)文章 最近,整理一份Java資料《Java從0到1》,覆蓋了Java核心技術(shù)、JVM、Java并發(fā)、SSM、微服務(wù)、數(shù)據(jù)庫、數(shù)據(jù)結(jié)構(gòu)等等。 獲取方式:關(guān)注公眾號并回復(fù)?Java?領(lǐng)取,更多Java內(nèi)容陸續(xù)奉上。
評論
圖片
表情
