JVM GC Allocation Failure 分析

(1)線上GC情況

JVM GC Allocation Failure 分析

(2)GC單條日誌分析

<code>2020-04-09T14:34:15.456+0800: 62982.576: [GC (Allocation Failure) 2020-04-09T14:34:15.456+0800: 62982.577: [ParNew: 1264923K->7719K(1415616K), 0.0092454 secs] 1558043K->300870K(1939904K), 0.0095074 secs] [Times: user=0.03 sys=0.00, real=0.01 secs]/<code>

(3)GC (Allocation Failure)分析

(3.1)GC關鍵字

表明進行了一次垃圾回收,前面沒有Full修飾,表明這是一次Minor GC ,注意它不表示只GC新生代,並且現有的不管是新生代還是老年代都會Stop The World。

(3.2)Allocation Failure:

表明本次引起GC的原因是因為在年輕代中沒有足夠的空間能夠存儲新的數據了。

(3.3)ParNew

ParNew表明本次GC發生在年輕代並且使用的是ParNew垃圾收集器。ParNew是一個Serial收集器的多線程版本,會使用多個CPU和線程完成垃圾收集工作(默認使用的線程數和CPU數相同,可以使用-XX:ParallelGCThreads參數限制)。該收集器採用複製算法回收內存,期間會停止其他工作線程,即Stop The World。

(3.4)ParNew 新生代分析

<code>[ParNew: 1264923K->7719K(1415616K), 0.0092454 secs]
[ParNew: 參數1->參數2(參數3), 參數4 secs]


[參數1]:1264923K  --- GC前該內存區域的大小 ---GC前1.2G
[參數2]:7719K     --- GC後該內存區域的大小 ---GC後0.007G
[參數3]:1415616K  --- 該區域分配的大小     ---新生代分配1.35G
[參數3]:0.0092454 --- GC耗時,單位:秒/<code>

(3.5)ParNew 堆分析

<code>1558043K->300870K(1939904K), 0.0095074 secs
參數1->參數1(參數3), 參數4 secs


[參數1]:1558043K  --- 堆區垃圾回收前的大小   --- 1.485G
[參數2]:300870K   --- 堆區垃圾回收後的大小   --- 0.286G
[參數3]:1939904K  --- 該區域分配的大小      --- 1.85G
[參數3]:0.0095074 --- GC耗時,單位:


G/<code>

(3.6)數據分析

(3.6.1)新生代GC大小

<code>1264923 - 7719 = 1257204K/<code>

(3.6.2)HEAP區GC大小

<code>1558043 - 300870 = 1257173K/<code>

(3.6.3)進入老年代

<code>1257204 - 1257173 = 31K
說明該次共有31K內存從年輕代移到了老年代,可以看出來數量並不多,說明都是生命週期短的對象/<code> 

(4)JVM參數分析

(4.1)查看系統參數

<code>ps -ef|grep java


-Xms2048m  : 設置JVM促使內存為2G,JVM啟動時分配了2G內存
-Xmx2048m  : 最大堆大小2G
-Xmn1536m  : 設置年輕代大小為1.5G
-XX:+UseConcMarkSweepGC  : 設置年老代為併發收集
-XX:MaxTenuringThreshold=15 
-XX:+HeapDumpOnOutOfMemoryError
-XX:+UseParNewGC 
-XX:+PrintGCDetails/<code>

(4.2)Arthas查看GC相關參數

JVM GC Allocation Failure 分析



分享到:


相關文章: