JVM系列 GC日志的配置和分析

GC日志的生成

通过在应用启动的时候,配置jvm参数来实现GC日志的输出

GC日志参数设置

可以参照这个设置在 catelina.sh中配置,例如我的TEST环境

JAVA_OPTS="$JAVA_OPTS -server -Xms2048m  -XX:PermSize=256M -XX:MaxPermSize=1024M
-XX:+UseConcMarkSweepGC -XX:CMSFullGCsBeforeCompaction=2
-verbose:gc 
-Xloggc:/usr/developer/huangForBackUp/testgc.log
-XX:+PrintGCDateStamps 
-XX:+PrintGCDetails 
-XX:+PrintHeapAtGC
-XX:MaxTenuringThreshold=15
"

-verbose:gc 输出日志
-Xloggc:../logs/gc.log 日志文件的输出路径
-XX:+PrintGC 输出GC日志
-XX:+PrintGCDetails 输出GC的详细日志
-XX:+PrintGCTimeStamps 输出GC的时间戳(以基准时间的形式 基准时间是tomcat的启动时间:609587.773: [GC609587.773: [ParNew: 286262K->12045K(306688K))
-XX:+PrintGCDateStamps 输出GC的时间戳(以日期的形式,2019-01-30T16:25:25.454+0800: 203.999: [GC2019-01-30T16:25:25.45)
-XX:+PrintHeapAtGC 在进行GC的前后打印出堆的信息,注意是前后都会打印

Heap after GC invocations=42 (full 0):
 par new generation   total 306688K, used 34048K [0x00000006c7200000, 0x00000006dbec0000, 0x00000006dbec0000)
  eden space 272640K,   0% used [0x00000006c7200000, 0x00000006c7200000, 0x00000006d7c40000)
  from space 34048K, 100% used [0x00000006d7c40000, 0x00000006d9d80000, 0x00000006d9d80000)
  to   space 34048K,   0% used [0x00000006d9d80000, 0x00000006d9d80000, 0x00000006dbec0000)
 concurrent mark-sweep generation total 1756416K, used 571751K [0x00000006dbec0000, 0x0000000747200000, 0x00000007c0000000)
 concurrent-mark-sweep perm gen total 262144K, used 111041K [0x00000007c0000000, 0x00000007d0000000, 0x0000000800000000)
}
{Heap before GC invocations=42 (full 0):
 par new generation   total 306688K, used 306688K [0x00000006c7200000, 0x00000006dbec0000, 0x00000006dbec0000)
  eden space 272640K, 100% used [0x00000006c7200000, 0x00000006d7c40000, 0x00000006d7c40000)
  from space 34048K, 100% used [0x00000006d7c40000, 0x00000006d9d80000, 0x00000006d9d80000)
  to   space 34048K,   0% used [0x00000006d9d80000, 0x00000006d9d80000, 0x00000006dbec0000)
 concurrent mark-sweep generation total 1756416K, used 571751K [0x00000006dbec0000, 0x0000000747200000, 0x00000007c0000000)
 concurrent-mark-sweep perm gen total 262144K, used 115737K [0x00000007c0000000, 0x00000007d0000000, 0x0000000800000000)

类型概述

  • [DefNew 表示用的Serial 年轻代回收器
  • [ParNew 表示年轻代用的 Parnew
  • [PSYoungGen: 表示年轻代用的是 Parallel Scanvenge

解读YGC的一条日志

  • 下面是[ParNew] 表示年轻代回收器,也就是YGC
  • 年轻代从306688K(eden+S0)经过YGC后变成了26672K,年轻代的总容量还是306688K,YGC累计系统耗时 0.0505390 secs,整个堆区从YGC前的878439K变成了压缩后的614977K,整个堆区的容量为2063104K(实际上忽略了一个S0区的大小)
  • S0区大小34048K, S0 +2063104K=2097152 K= 2G
[GC2019-01-30T16:25:25.454+0800: 203.999: [ParNew: 306688K->26672K(306688K), 0.0505390 secs] 878439K->614977K(2063104K), 0.0507020 secs][Times: user=0.16 sys=0.00, real=0.05 secs] 

猜你喜欢

转载自blog.csdn.net/weixin_34150503/article/details/87513127