GC日志-爱代码爱编程
9.2. GC日志
1)特别说明
每种垃圾回收器的日志格式是不同的
2)实际生产中日志参数设置
在实际生产中要保存的日志格式如下所示,至少需要包含以下内容:
-Xloggc:/opt/xxx/logs/xxx-xxx-gc-%t.log 设置日志的保存位置
-XX:+UseGCLogFileRotation 设置日志循环保存
-XX:NumberOfGCLogFiles=5 设置使用5个日志文件
-XX:GCLogFileSize=20M 设置每个日志文件的大小为20M
-XX:+PrintGCDetails 设置每个日志文件中要打印GC信息
-XX:+PrintGCDateStamps 设置在每次GC时打印时间信息
-XX:+PrintGCCause 设置每次GC时的原因
9.2.1. Parallel Old垃圾回收器的日志
这里以Parallel Old垃圾回收器的日志为例,进行介绍:
3)堆的内存日志信息
其中,新生代的total大小记录的是Eden区和survivor1或survivor2区的大小,并不是Eden区、survivor1和survivor2区的大小。
9.2.2. CMS垃圾回收器的日志
1)指定CMS的命令行指令
在linux系统下指定CMS作为垃圾回收器的执行命令:java -Xms最小堆大小 -Xmx最大堆大小 -XX:+PrintGCDetails -XX:+UseConcMarkSweepGC 文件名。例如,java -Xms20M -Xmx20M -XX:+PrintGCDetails -XX:+UseConcMarkSweepGC com.mashibing.jvm.gc.T15_FullGC_Problem01
2)CMS日志-年轻代部分
通过UseConcMarkSweepGC参数指定使用ParNew和CMS作为组合垃圾回收器使用,所以在年轻代进行垃圾回收时,是ParNew进行垃圾回收。
3)CMS日志-老年代部分
老年代采用CMS进行垃圾回收,在初始标记阶段耗时时间最长。
a.在初始标记阶段,8511 (13696) 为老年代使用的最大内存空间,9866 (19840) 为整个堆使用的最大空间。
b.在并发标记阶段,时间意义不大,因为是并发执行。
c.在重新标记阶段中, YG occupancy为年轻代占用及容量,[Rescan (parallel)为STW下的存活对象标记,weak refs processing为弱引用处理,class unloading为卸载用不到的class,scrub symbol(string) table为cleaning up symbol and string tables which hold class-level metadata and internalized string respectively,CMS-remark: 8511K(13696K)为阶段过后的老年代占用及容量,10108K(19840K)为阶段过后的堆占用及容量。
d.在并发清除阶段中,标记已经完成,进行并发清理。
e.在并发重置阶段中,重置内部结构,为下次GC做准备。
9.2.3. G1垃圾回收器的日志
G1的日志如下所示,其中每一部分代表意义均添加在里面了。
[GC pause (G1 Evacuation Pause) (young) (initial-mark), 0.0015790 secs]
//young -> 年轻代 Evacuation-> 复制存活对象
//initial-mark 混合回收的阶段,这里是YGC混合老年代回收
[Parallel Time: 1.5 ms, GC Workers: 1] // GC Workers表示只有一个GC线程
[GC Worker Start (ms): 92635.7]
[Ext Root Scanning (ms): 1.1] // 寻找GC Roots
[Update RS (ms): 0.0] // 更新RSet
[Processed Buffers: 1]
[Scan RS (ms): 0.0] // 扫描RSet
[Code Root Scanning (ms): 0.0]
[Object Copy (ms): 0.1] // 对象拷贝
[Termination (ms): 0.0]
[Termination Attempts: 1]
[GC Worker Other (ms): 0.0]
[GC Worker Total (ms): 1.2]
[GC Worker End (ms): 92636.9]
[Code Root Fixup: 0.0 ms]
[Code Root Purge: 0.0 ms]
[Clear CT: 0.0 ms]
[Other: 0.1 ms]
[Choose CSet: 0.0 ms]
[Ref Proc: 0.0 ms]
[Ref Enq: 0.0 ms]
[Redirty Cards: 0.0 ms]
[Humongous Register: 0.0 ms]
[Humongous Reclaim: 0.0 ms]
[Free CSet: 0.0 ms]
[Eden: 0.0B(1024.0K)->0.0B(1024.0K) Survivors: 0.0B->0.0B Heap: 18.8M(20.0M)->18.8M(20.0M)]
[Times: user=0.00 sys=0.00, real=0.00 secs]
//以下是混合回收其他阶段
[GC concurrent-root-region-scan-start]
[GC concurrent-root-region-scan-end, 0.0000078 secs]
[GC concurrent-mark-start]
//无法evacuation,进行FGC
[Full GC (Allocation Failure) 18M->18M(20M), 0.0719656 secs]
[Eden: 0.0B(1024.0K)->0.0B(1024.0K) Survivors: 0.0B->0.0B Heap: 18.8M(20.0M)->18.8M(20.0M)], [Metaspace: 38
76K->3876K(1056768K)] [Times: user=0.07 sys=0.00, real=0.07 secs]
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/Waiting_Mr_Liu/article/details/111086927