[Java] 查看与分析GC日志

如何查看G1收集器的GC日志

Posted by Penistrong on September 27, 2023

查看与分析GC日志

小米一面

你有看过G1收集器的GC日志吗? 业务高并发情况与平常情况的GC表现是完全不同的,要进行调优就要分析GC日志

在性能调优方面,我的经验非常欠缺,只是了解怎么dump某个时间点JVM里的快照,以进行堆栈分析,但是对怎么查看并分析GC日志毫无经验

特此学习一下

查看GC日志

首先要说明的是,JVM以默认参数启动时,不会记录并保留GC日志(像ElasticSearch这样的搜索系统会默认打开GC日志的JVM Flags)

运行JVM时,开启以下2个flag或1个flag即可记录GC日志(自JDK9开始有所不同),滚动日志的开启策略也有些许不同:

#! before JDK8 (included JDK8)
-XX:+PrintGCDetails -Xloggc:/path/to/gc_log_file
# enable gc log rotation, specifiy log file numbers and size limit
-XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=10M

#! after JDK9 just one flag with gc log rotation settings
-Xlog:gc*:file=/path/to/gc_log_file,filecount=10,filesize=10M

对于已经运行的JVM进程,可以如下找到其运行时的相关参数,即可获得GC日志的路径:

# jps命令找到当前运行的Java进程号
jps

# jinfo命令查看给定JVM进程的java信息
jinfo <pid>

# 寻找上述-Xloggc或-Xlog:gc*等参数里给出的GC日志路径

分析GC日志