解析一行gc日志

网友投稿 598 2022-09-01

解析一行gc日志

解析一行gc日志

线上某个项目 ,启动参数

-verbose:gc -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -Xloggc:/opt/logs/spring-boot/gc.log

在gc.log里面发现了这些gc信息

315201.296: [GC (Allocation Failure) 315201.296: [ParNew: 1751390K->80739K(1887488K), 0.0101556 secs] 2491410K->820942K(3984640K), 0.0102680 secs] [Times: user=0.06 sys=0.00, real=0.01 secs]318743.612: [GC (Allocation Failure) 318743.612: [ParNew: 1758563K->59949K(1887488K), 0.0147964 secs] 2498766K->800188K(3984640K), 0.0148845 secs] [Times: user=0.07 sys=0.00, real=0.01 secs]318775.604: [GC (Allocation Failure) 318775.604: [ParNew: 1737773K->68351K(1887488K), 0.0123685 secs] 2478012K->808592K(3984640K), 0.0124858 secs] [Times: user=0.07 sys=0.00, real=0.01 secs]318802.834: [GC (Allocation Failure) 318802.834: [ParNew: 1746175K->69771K(1887488K), 0.0116771 secs] 2486416K->811408K(3984640K), 0.0117842 secs] [Times: user=0.07 sys=0.00, real=0.01 secs]322350.761: [GC (Allocation Failure) 322350.761: [ParNew: 1747595K->63162K(1887488K), 0.0167381 secs] 2489232K->814601K(3984640K), 0.0168509 secs] [Times: user=0.07 sys=0.00, real=0.02 secs]322381.402: [GC (Allocation Failure) 322381.402: [ParNew: 1740986K->51842K(1887488K), 0.0129548 secs] 2492425K->803283K(3984640K), 0.0130594 secs] [Times: user=0.06 sys=0.00, real=0.01 secs]322404.064: [GC (Allocation Failure) 322404.064: [ParNew: 1729666K->55762K(1887488K), 0.0115347 secs] 2481107K->807314K(3984640K), 0.0116484 secs] [Times: user=0.07 sys=0.00, real=0.01 secs]

堆信息为:

using parallel threads in the new generation.using thread-local object allocation.Concurrent Mark-Sweep GCHeap Configuration: MinHeapFreeRatio = 40 MaxHeapFreeRatio = 70 MaxHeapSize = 4294967296 (4096.0MB) NewSize = 2147483648 (2048.0MB) MaxNewSize = 2147483648 (2048.0MB) OldSize = 2147483648 (2048.0MB) NewRatio = 2 SurvivorRatio = 8 MetaspaceSize = 134217728 (128.0MB) CompressedClassSpaceSize = 1073741824 (1024.0MB) MaxMetaspaceSize = 134217728 (128.0MB) G1HeapRegionSize = 0 (0.0MB)Heap Usage:New Generation (Eden + 1 Survivor Space): capacity = 1932787712 (1843.25MB) used = 473374352 (451.44496154785156MB) free = 1459413360 (1391.8050384521484MB) 24.491792298811966% usedEden Space: capacity = 1718091776 (1638.5MB) used = 453233264 (432.23692321777344MB) free = 1264858512 (1206.2630767822266MB) 26.380038035872655% usedFrom Space: capacity = 214695936 (204.75MB) used = 20141088 (19.208038330078125MB) free = 194554848 (185.54196166992188MB) 9.381215301625458% usedTo Space: capacity = 214695936 (204.75MB) used = 0 (0.0MB) free = 214695936 (204.75MB) 0.0% usedconcurrent mark-sweep generation: capacity = 2147483648 (2048.0MB) used = 815511248 (777.7321319580078MB) free = 1331972400 (1270.2678680419922MB) 37.9752017557621% used

首先对堆信息进行简单介绍。使用的cms垃圾收集,最大堆大小​​MaxHeapSize​​​为​​4G​​​.​​NewRatio​​​大小为​​2​​​,所以可知年轻代大小和年老代大小均为​​2G​​​. 而​​​SurvivorRatio=8​​​ ,所以可知Eden区大小为​​2G/(8+1+1)*8​​​即​​1638.4M​​​.s0和s1大小分别为:​​204.8M​​​ 而在参数中我们可以发现 ​​New Generation​​的大小等于​​Eden + 1 Survivor Space​​ 是因为S区只有一个s0或者s1可用。 下面对于第一条日志进行解析

315201.296: [GC (Allocation Failure) 315201.296: [ParNew: 1751390K->80739K(1887488K), 0.0101556 secs] 2491410K->820942K(3984640K), 0.0102680 secs] [Times: user=0.06 sys=0.00, real=0.01 secs]

GC (Allocation Failure) 315201.296 gc: 区别发生的是minor gc (ygc)还是major gc (即full gc) 此次是发生的minor gc (ygc) (Allocation Failure): gc的原因是 eden区剩余空间不足分配对象 315201.296 : gc发生的时间(从jvm的启动时间开始)

[ParNew: 1729666K->55762K(1887488K), 0.0115347 secs]

ParNew: 表示使用的是ParNew 并行收集器 1729666K 表示gc前年轻代区域空间大小 55762K 表示gc后年轻代空间大小 1729666K 表示年轻代空间可用的总大小(减去一个S区) 0.0115347 secs gc持续的时间 单位秒

2491410K->820942K(3984640K), 0.0102680 secs]

2491410K 表示整个堆gc前所占用的大小 820942K 表示整个堆gc后所占用的大小 3984640K 表示整个堆的可用大小(减去一个S区)

通过上面可知

eden + 1 survivor space = 1887488K

年轻代(eden + 一个s区 ):空间减少 1751390K - 80739K = 1670651K 总堆空间减少 : 2491410K - 820942K = 1670468K 所以有:1670651K - 1670468K = 183K 大小的对象进入老年代 对于老年代有2G,每次ygc只有183K大小的对象进入老年代,还是可以接受的。

当然 此时即使我们发现minor gc后有对象进行old区,也不清楚是何原因。可能是s区的对象达到了晋升年龄,可能是eden区无用对象清理后,剩余对象的大小大于s区空间,部分对象将放入old区,可能是old区进行分配担保,如果你想把所有对象留在年轻代,那么就要找原因,然后找对应的处理办法。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:认识PHP的四大特性八大优势(php三大特性)
下一篇:spark streaming被压分析
相关文章

 发表评论

暂时没有评论,来抢沙发吧~