JVM-GC日志分析

Posted 狗哥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JVM-GC日志分析相关的知识,希望对你有一定的参考价值。

程序运行时配置如下参数:

-Xms20M -Xmx20M -Xmn10M -verbose:gc -XX:+PrintGCDetails -XX:SurvivorRatio=8 -XX:+PrintGCTimeStamps

最终,程序输出:

0.070: [GC (Allocation Failure) [PSYoungGen: 7127K->616K(9216K)] 11223K->4720K(19456K), 0.0008663 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
0.072: [GC (Allocation Failure) --[PSYoungGen: 6923K->6923K(9216K)] 11027K->15123K(19456K), 0.0016749 secs] [Times: user=0.02 sys=0.00, real=0.00 secs] 
0.073: [Full GC (Ergonomics) [PSYoungGen: 6923K->0K(9216K)] [ParOldGen: 8200K->6660K(10240K)] 15123K->6660K(19456K), [Metaspace: 2559K->2559K(1056768K)], 0.0044663 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
Heap
 PSYoungGen      total 9216K, used 4404K [0x00000000ff600000, 0x0000000100000000, 0x0000000100000000)
  eden space 8192K, 53% used [0x00000000ff600000,0x00000000ffa4d1a0,0x00000000ffe00000)
  from space 1024K, 0% used [0x00000000ffe00000,0x00000000ffe00000,0x00000000fff00000)
  to   space 1024K, 0% used [0x00000000fff00000,0x00000000fff00000,0x0000000100000000)
 ParOldGen       total 10240K, used 6660K [0x00000000fec00000, 0x00000000ff600000, 0x00000000ff600000)
  object space 10240K, 65% used [0x00000000fec00000,0x00000000ff281398,0x00000000ff600000)
 Metaspace       used 2565K, capacity 4486K, committed 4864K, reserved 1056768K
  class space    used 281K, capacity 386K, committed 512K, reserved 1048576K

GC日志分析:

1、最前面的数字 "0,070" 代表了GC发生的时间,这个数字的含义是从Java虚拟机启动以来经过的秒数

2、GC日志开头的“[GC 和 [Full GC” 说明了这次垃圾收集的停顿类型,而不是用来区分新生代GC还是年老代GC的。

3、PSYoungGen, ParOldGen,PSPermGen表示GC发生的区域,这里显示的区域名称与使用的GC收集器密切相关,不同收集器对于不同区域所显示的名称可能不同。

4、后面方括号内部的 “ 7127K->616K(9216K) ”含义是“GC前该内存区域已使用容量 -> GC后该内存区域已使用容量(该内存区域总容量)”。方括号之外的 11223K->4720K(19456K) 表示GC前java堆已使用容量 -> GC后java堆已使用容量(Java堆总容量)

5、0.0008663 secs表示该内存区域GC所占用的时间,单位是秒。

6、[Times: user=0.00 sys=0.00, real=0.00 secs] 这里面的user、sys、和real与Linux的time命令所输出的时间含义一致。分别代表用户消耗的CPU时间,内存态消耗的CPU时间,和操作从开始到结束所经过的墙钟时间。

 

JVM的GC日志的主要参数包括如下几个:

-XX:+PrintGC 输出GC日志

-XX:+PrintGCDetails 输出GC的详细日志

-XX:+PrintGCTimeStamps 输出GC的时间戳(以基准时间的形式)

-XX:+PrintGCDateStamps 输出GC的时间戳(以日期的形式,如 2013-05-04T21:53:59.234+0800)

-XX:+PrintHeapAtGC 在进行GC的前后打印出堆的信息

-XX:+PrintGCApplicationStoppedTime // 输出GC造成应用暂停的时间

-Xloggc:../logs/gc.log 日志文件的输出路径

以上是关于JVM-GC日志分析的主要内容,如果未能解决你的问题,请参考以下文章

JVM-GC设计思路分析

JVM-GC设计思路分析

JVM-GC-串行回收器-SerialGC实战

Oracle数据库从RMAN备份集片段还原指定单个归档日志进行日志挖掘分析

jvm-gc二

python分析apache和nginx日志文件输出访客ip列表的代码