开启GC日志
- -XX:+PrintGCDetails参数则可以打印详细GC信息至控制台
- -XX:+PrintGCDateStamps则可以记录GC发生的详细时间
- -Xloggc:gc.log可以把GC输出至文件
日志格式
- -XX:+PrintGCDetails日志格式: [GC [PSYoungGen: 142826K->10751K(274944K)] 162800K->54759K(450048K), 0.0609952 secs] [Times: user=0.13 sys=0.02, real=0.06 secs]
- 加上-XX:+PrintGCDateStamps的日志格式: 2017-02-20T11:46:11.855+0800: 0.723: [Full GC (Metadata GC Threshold) [PSYoungGen: 16166K->0K(153088K)] [ParOldGen: 88K->15398K(349696K)] 16254K->15398K(502784K), [Metaspace: 20906K->20906K(1069056K)], 0.0196853 secs] [Times: user=0.06 sys=0.02, real=0.02 secs]
日志含义
` 2017-02-20T11:46:11.855+0800: 0.723: [Full GC (Metadata GC Threshold) [PSYoungGen: 16166K->0K(153088K)] [ParOldGen: 88K->15398K(349696K)] 16254K->15398K(502784K), [Metaspace: 20906K->20906K(1069056K)], 0.0196853 secs] [Times: user=0.06 sys=0.02, real=0.02 secs] `
- 2017-02-20T11:46:11.855+0800
- 2017-02-20T11:46:11.855+0800 GC事件(GC event)开始的时间点.
- 0.723
- 0.723 – GC时间的开始时间,相对于JVM的启动时间,单位是秒(Measured in seconds).
- Full GC
- 用来区分是 Minor GC 还是 Full GC 的标志(Flag)
- Metadata GC Threshold
- 引起垃圾回收的原因,GC是Metaspace分配失败造成的.Java 8 Metaspaces取代PermGen
- PSYoungGen
- 使用的垃圾收集器的名字
- 16166K->0K
- 在本次垃圾收集之前和之后整个堆内存的使用情况
- (153088K)
- 年轻代的总的大小
- ParOldGen
- 使用的垃圾收集器的名字
- 88K->15398K
- 在本次垃圾收集之前和之后整个堆内存的使用情况
- (349696K)
- 老年代的总的大小
- 16254K->15398K
- 在本次垃圾收集之前和之后整个堆内存的使用情况
- (502784K)
- 总的可用的堆内存
- Metaspace: 20906K->20906K(1069056K)]
- Metaspace内存的信息,同上
- 0.0196853 secs
- GC事件的持续时间(Duration),单位是秒
- Times: user=0.46 sys=0.05, real=0.07 secs
- user 此次垃圾回收, 垃圾收集线程消耗的所有CPU时间
- sys操作系统调用(OS call) 以及等待系统事件的时间(waiting for system event)
- real则代表应用程序暂停的时间(在多核CPU中并行回收,它通常小于user)