GC日志参数
设定日志参数(找到tomcat的解压目录,进入bin文件夹,修改catalina.bat/sh),spring boot项目 jar 启动直接命令启动
set "JAVA_OPTS=
-XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCCause
-XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps
-XX:+UseGCLogFileRotation
-XX:NumberOfGCLogFiles=5
-XX:GCLogFileSize=20M
-Xloggc:D:\gc-%t.log"
开启日志
| 参数 | 介绍 |
|---|---|
| -XX:+PrintGC | 开启GC日志打印 |
| -XX:+PrintGCDetails | 打印GC日志详细信息 |
| -XX:+PrintGCCause | 打印GC回收原因 |
| -XX:+PrintGCDateStamps | 打印GC发生日期戳 |
| -XX:+PrintGCTimeStamps | 打印GC发生时间戳 |
| -Xloggc:D:\gc-%t.log | 设置日志文件保存目录(如果不设置默认会打印到前台输出) |
日志生产方式
如果不设置滚动日志通过%t.log每天生成一个jvm的GC文件但需要定时清理
| 参数 | 介绍 |
|---|---|
| -XX:+UseGCLogFileRotation | 开启滚动生成日志 |
| -XX:NumberOfGCLogFiles=5 | 滚动GC日志文件数,默认: 0 不滚动 |
| -XX:GCLogFileSize=20M | 每个GC日志文件分割时的大小 |
分析日志文件
每种垃圾回收器的日志格式是不同的!
3.448: [GC (Metadata GC Threshold) [PSYoungGen: 10749K->5119K(71680K)] 17251K->12177K(159232K), 0.0103527 secs] [Times: user=0.02 sys=0.00, real=0.01 secs]
3.459: [Full GC (Metadata GC Threshold) [PSYoungGen: 5119K->0K(71680K)] [ParOldGen: 7058K->6474K(50688K)] 12177K->6474K(122368K), [Metaspace: 20292K->20292K(1067008K)], 0.0454318 secs] [Times: user=0.09 sys=0.00, real=0.05 secs]
3.448:
GC 指的是YGC 本地回收年轻代
(Metadata GC Threshold) 回收原因
[PSYoungGen: 10749K->5119K(71680K)] : 新生代垃圾收集器简称: 回收前新生代大小 -> 回收后新生代大小(新生代总大小)
17251K->12177K(159232K) : 堆空间回收前大小 -> 堆空间回收后大小 (堆空间总大小)
0.0103527 secs : 本次垃圾收集占用总时间
[Times: user=0.02 sys=0.00, real=0.01 secs] : 本地垃圾收集 用户态占用时间,内核态占用时间,总时间
3.459:
Full GC: 本次回收新生代老年代都会进行垃圾回收
(Metadata GC Threshold) 回收原因
[PSYoungGen: 5119K->0K(71680K)] : 新生代垃圾收集器简称: 回收前新生代大小 -> 回收后新生代大小(新生代总大小)
[ParOldGen: 7058K->6474K(50688K)] : 老年代垃圾收集器简称: 回收前老年代大小 -> 回收后老年代大小(老年代总大小)
12177K->6474K(122368K) : 堆空间回收前大小 -> 堆空间回收后大小 (堆空间总大小)
[Metaspace: 20292K->20292K(1067008K)] : 方法区/元空间 元空间:元空间回收前大小 -> 元空间回收后大小 (元空间总大小)
0.0454318 secs : 本次垃圾收集占用总时间
[Times: user=0.09 sys=0.00, real=0.05 secs] : 本地垃圾收集 用户态占用时间,内核态占用时间,总时间