0120-分析GC日志

1. GC日志参数

  • -verbose:gc 输出gc日志信息,默认输出到标准输出
  • -XX:+PrintGC 等同于-verbose:gc 表示打开简化的GC日志
  • -XX:+PrintGCDetails 在发生垃圾回收时打印内存回收详细的日志,并在进程退出时输出当前内存各区域分配情况
  • -XX:+PrintGCTimeStamps 输出GC发生时的时间戳,时间是从程序执行到现在的时间
  • -XX:+PrintHeapAtGC 每一次GC前和GC后,都打印堆信息
  • -Xloggc: 把GC日志写入到一个文件中去,而不是打印到标准输出中
  • -XX:+PrintGCDateStamps 输出GC的日期时间戳

2. GC日志格式

1. GC分类

  • MinorGC
  • MajorGC
  • FullGC

2. GC日志分类

  • MinorGC
  • FullGC

3. GC日志剖析

垃圾收集器

  • Serial (Default New Generation) “[DefNew”
  • ParNew (Parallel New Generation) “[ParNew”
  • Parallel Scavenge “[PSYoungGen”
  • Parallel Old Generation “[ParOldGen”
  • G1 “[garbage-first heap”

GC前后情况

  • 新生代
    • 回收前大小
    • 回收后大小
    • 总大小
  • 堆空间
    • 回收前大小
    • 回收后大小
    • 总大小

GC时间

  • user 用户代码执行时间
  • sys 内核态消耗时间
  • real 程序从开始到结束时间

4. MinorGC日志分析

完整日志

2021-02-24T14:16:13.583+0800: 0.386: [GC (Allocation Failure) [PSYoungGen: 2048K->496K(2560K)] 2048K->872K(9728K), 0.0120934 secs] [Times: user=0.00 sys=0.00, real=0.01 secs]

gc执行时间

2021-02-24T14:16:13.583+0800:

gc发生时,jvm虚拟机启动以来经过的秒数

0.386:

GC执行原因,Eden区分配失败

[GC (Allocation Failure)

垃圾回收器,年轻代空间大小

[PSYoungGen: 2048K->496K(2560K)]
  • PSYoungGen: 表示gc发生的区域,区域名称与使用的GC收集器密切相关
    • Serial收集器:Default New Generation 显示DefNew
    • ParNew收集器:ParNew
    • Parallel Scanvenge收集器:PsYoung
    • 老年代和新生代同理
  • 2048K->496K(2560K)gc前该内存区域已使用容量 -> GC后该区域容量(该区域总容量)
    • 如果是新生代,总容量则会显示整个新生代的9/10,即eden + from/to区
    • 如果是老年代,总容量是全部内存大小,无变化

整堆空间大小

2048K->872K(9728K)

在显示完区域容量GC的情况之后,会接着显示整个内存区域的GC情况:GC前堆内存已使用容量->GC后堆内存容量(堆内存总容量),堆内存总容量 = 9/10新生代 + 老年代《初始化的内存大小(Eden:from:to = 6:1:1自动优化)

整个GC花费的时间,单位秒

0.0120934 secs

整个GC花费的时间,单位秒

时间统计

[Times: user=0.00 sys=0.00, real=0.01 secs]
  • user cpu在用户态的花费时间,这次gc中,执行用户代码的时间,每个cpu单独算
  • sys cpu在内核态的时间,cpu的调度时间 user+sys
  • real gc花费的总时间

5. MajorGC日志分析

完整日志

2021-02-24T15:02:43.537+0800: 54.324: [Full GC (Allocation Failure) [PSYoungGen: 15486K->15486K(17920K)] [ParOldGen: 40436K->40436K(40960K)] 55923K->55923K(58880K), [Metaspace: 3470K->3470K(1056768K)], 0.0042270 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]

GC原因

[Full GC (Allocation Failure)

发生了一次Full GC

  • Full GC (Allocation Failure)空间分配失败
  • Full GC(Ergonomics) JVM自适应调整导致的GC
  • Full GC(sytem) System.gc()导致的GC

老年代空间大小

[ParOldGen: 40436K->40436K(40960K)]

老年代没有回收垃圾

元空间大小

[Metaspace: 3470K->3470K(1056768K)]

元空间没有发生GC因为是Eden分配失败

3. GC日志分析工具

GCeasy

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值