查看与分析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日志路径