JVM分析GC日志

7 篇文章 0 订阅

1、GC日志参数

-verbose:gc //输出gc日志信息,默认输出到标准输出
-XX:+PrintGC //输出GC日志。类似:-verbose:gc
-XX:+PrintGCDetails //在发生垃圾回收时打印内存回收相处的日志, 并在进程退出时输出当前内存各区域分配情况
-XX:+PrintGCTimeStamps //输出GC发生时的时间戳
-XX:+PrintGCDateStamps 输出GC发生时的时间戳(以日期的形式,例如:2013-05-04T21:53:59.234+0800)
-XX:+PrintHeapAtGC// 每一次GC前和GC后,都打印堆信息

 

-Xloggc:<file> //表示把GC日志写入到一个文件中去,而不是打印到标准输出中

2、GC日志格式

[GC (Allocation Failure) [PSYoungGen: 18944K->2528K(18944K)] 30757K->30427K(62976K), 0.0036557 secs] [Times: user=0.00 sys=0.00, real=0.01 secs] 


[Full GC (Ergonomics) [PSYoungGen: 2528K->0K(18944K)] [ParOldGen: 27899K->30149K(44032K)] 30427K->30149K(62976K), [Metaspace: 3160K->3160K(1056768K)], 0.0042183 secs] [Times: user=0.01 sys=0.01, real=0.00 secs] 

2.1  [GC(Allocation Failure)

发生了一次垃圾回收,这是一次Minior GC。它不区分新生代还是老年代GC,括号里的内容是gc发生的原因,这里的Allocation Failure的原因是新生代中没有足够区域能够存放需要分配的数据而失败

2.2、[PSYoungGen:76800K->8433K(89600K)

PSYoungGen:表示GC发生的区域,区域名称与使用的GC收集器是密切相关的

Serial收集器:Default New Generation 显示Defnew

ParNew收集器:ParNew

Parallel Scanvenge收集器:PSYoung

老年代和新生代同理,也是和收集器名称相关

76800K->8433K(89600K):GC前该内存区域已使用容量->GC后盖区域容量(该区域总容量)

如果是新生代,总容量则会显示整个新生代内存的9/10,即eden+from/to区

如果是老年代,总容量则是全身内存大小,无变化

76800K->8449K(294400K)

在显示完区域容量GC的情况之后,会接着显示整个堆内存区域的GC情况:GC前堆内存已使用容量->GC后堆内存容量(堆内存总容量),并且堆内存总容量 = 9/10 新生代 + 老年代,然后堆内存总容量肯定小于初始化的内存大小

[Times:user=0.02 sys=0.01,real=0.01 secs]

user:指CPU工作在用户态所花费的时间

sys:指CPU工作在内核态所花费的时间

real:指在此次事件中所花费的总时间

,0.0088371

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

Full GC(Metadata GCThreshold):

括号中是gc发生的原因,原因:Metaspace区不够用了。

除此之外,还有另外两种情况会引起Full GC,如下:

1、Full GC(FErgonomics)

原因:JVM自适应调整导致的GC

2、Full GC(System)

原因:调用了System.gc()方法

[PSYoungGen: 100082K->0K(89600K)]

PSYoungGen:表示GC发生的区域,区域名称与使用的GC收集器是密切相关的

Serial收集器:Default New Generation 显示DefNew

ParNew收集器:ParNew

Parallel Scanvenge收集器:PSYoungGen

老年代和新生代同理,也是和收集器名称相关

ParOldGen:32K->9638K(204800K)

老年代区域没有发生GC,因此本次GC是metaspace引起的

[Meatspace:20158K->20156K(1067008K)],

metaspace GC 回收2K空间

3、GC日志分析工具

4、GC分类

4.1、FGC GC回收新生代和老年代,也有概述是整堆收集

4.2、YGC GC 回收新生代

4.3、触发GC

1>老年代空间不足

2>方法区空间不足

3>显示调佣System.gc()

4>Minior GC进入老年代的数据的平均大小 大于 老年代的可用内存()

5>大对象直接进入老年代。老年代空间不足

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

追逐路上的小人物

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值