GC日志是指GC(Garbage Collection,垃圾回收)的记录日志,主要用于排查JVM内存问题和性能调优。在GC发生时,JVM会记录下当前内存使用情况、GC时间、GC原因、GC类型、GC前后各个内存区域的使用情况等信息,并输出到GC日志中。
常见的GC日志有以下几种格式:
-
-Xloggc:filename [可简写为 -verbose:gc,从JDK 9开始不再支持],以输出文件方式记录GC日志。
例如:
java -Xloggc:/home/user/gc.log -jar myapp.jar
这条命令会将GC日志输出到/home/user/gc.log
文件中。
-
-XX:+PrintGC 和 -XX:+PrintGCDetails,以输出到标准输出流方式记录GC日志。
例如:
java -XX:+PrintGC -XX:+PrintGCDetails -jar myapp.jar
这条命令会将GC日志输出到控制台。
另外,还有一些其他的GC日志参数,如-XX:+PrintGCDateStamps、-XX:+PrintGCTimeStamps、-XX:+PrintHeapAtGC等,可以根据需要进行使用。
下面是两个GC日志示例:
- 短时间间隔内多次Young GC的日志:
[GC (Allocation Failure) [PSYoungGen: 59905K->8704K(68608K)]
59905K->18005K(220160K), 0.0132214 secs]
[Times: user=0.02 sys=0.01, real=0.01 secs]
[GC (Allocation Failure) [PSYoungGen: 68608K->8704K(68608K)]
77909K->35012K(220160K), 0.0142372 secs]
[Times: user=0.03 sys=0.01, real=0.01 secs]
以上日志中,发生了两次Young GC,原因是分配内存失败。每次Young GC后,PSYoungGen内存从59905K、68608K分别降到了8704K,分别为内存使用情况、内存空间总大小、Young GC后整个堆内存的使用情况、堆内存总大小。两次GC中,整个堆内存的使用情况分别从59905K、77909K增加到了18005K、35012K,整个Young GC的耗时分别为0.0132214s、0.0142372s。
- Full GC的日志:
[Full GC (System.gc()) [PSYoungGen: 4128K->0K(6144K)]
[ParOldGen: 27007K->16943K(34944K)] 31135K->16943K(41088K), [Metaspace: 266K->266K(1056768K)], 0.0362059 secs]
[Times: user=0.10 sys=0.01, real=0.03 secs]
以上日志中,发生了一次Full GC,原因是手动调用了System.gc()。在此次GC中,Young Gen完全被清空,Old Gen恢复了一部分内存,整个堆内存从31135K缩减到了16943K。Metaspace没有任何变化。此次GC的耗时为0.0362059s,其中,user=0.10秒代表用户态CPU的消耗时间,sys=0.01秒代表内核态CPU的消耗时间,real=0.03代表实际花费的时间。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:什么是GC日志? - Python技术站