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 分析



分享到:


相關文章: