本教程操作环境:windows7系统、java10版,DELL G3电脑。
1.概念
可以帮助我们更好地排查一些线上问题,如OOM、应用停顿时间过长等等。GC日志对我们进行JVM调优也是很有帮助的。采用不同的GC收集器所产生的GC日志的格式会稍微不同,但虚拟机设计者为了方便用户阅读,将各个收集器的日志都维持一定的共性。
2.日志格式
<datestamp>:[GC[<collector>:<start occupancy1>-><end occupancy1>(total size1),<pause time1> secs]<start occupancy2>-><end occupancy2>(total size2),<pause time2> secs] [Times:<user time> <system time>, <real time>]
3.日志查看参数
javaGC日志查看可以通过在java命令种加入参数来指定对应的gc类型,打印gc日志信息并输出至文件等策略。
-XX:+PrintGC 输出GC日志
-XX:+PrintGCDetails 输出GC的详细日志
-XX:+PrintGCTimeStamps 输出GC的时间戳(以基准时间的形式)
-XX:+PrintGCDateStamps 输出GC的时间戳(以日期的形式,如 2013-05-04T21:53:59.234+0800)
-XX:+PrintHeapAtGC 在进行GC的前后打印出堆的信息
-Xloggc:../logs/gc.log 日志文件的输出路径
4.实例
(1)Java HotSpot(TM) 64-Bit Server VM warning: ignoring option HandlePromotionFailure; support was removed in 6.0_24 (2)2018-05-05T22:34:16.800+0800: [GC [PSYoungGen: 8184K->1000K(9216K)] 8184K->3398K(19456K), 0.0080798 secs] [Times: user=0.02 sys=0.00, real=0.01 secs] (3)2018-05-05T22:34:16.808+0800: [GC [PSYoungGen: 7445K->952K(9216K)] 9843K->9502K(19456K), 0.0042325 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] (4)2018-05-05T22:34:16.813+0800: [Full GC [PSYoungGen: 952K->0K(9216K)] [ParOldGen: 8550K->7001K(10240K)] 9502K->7001K(19456K) [PSPermGen: 4940K->4939K(21504K)], 0.0267644 secs] [Times: user=0.02 sys=0.00, real=0.03 secs] (5)Heap (6) PSYoungGen total 9216K, used 6234K [0x00000000ff600000, 0x0000000100000000, 0x0000000100000000) (7) eden space 8192K, 76% used [0x00000000ff600000,0x00000000ffc16b08,0x00000000ffe00000) (8) from space 1024K, 0% used [0x00000000fff00000,0x00000000fff00000,0x0000000100000000) (9) to space 1024K, 0% used [0x00000000ffe00000,0x00000000ffe00000,0x00000000fff00000) (10) ParOldGen total 10240K, used 7001K [0x00000000fec00000, 0x00000000ff600000, 0x00000000ff600000) (11) object space 10240K, 68% used [0x00000000fec00000,0x00000000ff2d6630,0x00000000ff600000) (12) PSPermGen total 21504K, used 4949K [0x00000000f9a00000, 0x00000000faf00000, 0x00000000fec00000) (13) object space 21504K, 23% used [0x00000000f9a00000,0x00000000f9ed55e0,0x00000000faf00000)
以上就是gc日志在java的查看方法,通过日志的形式,我们能够对问题的处理追根溯源,同时进行相应的优化工作。大家在学会日志的方法后,可以就自己的gc日志做一个查看。