java GC 学习(三)

"开启GC日志"

Posted by Jht on February 21, 2017

开启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)