JVM-(十五)GC日志
本文最后更新于:May 13, 2023 pm
积土成山,风雨兴焉;积水成渊,蛟龙生焉;积善成德,而神明自得,圣心备焉。故不积跬步,无以至千里,不积小流无以成江海。齐骥一跃,不能十步,驽马十驾,功不在舍。面对悬崖峭壁,一百年也看不出一条裂缝来,但用斧凿,能进一寸进一寸,能进一尺进一尺,不断积累,飞跃必来,突破随之。
目录
GC日志分析
内存分配与垃圾回收的参数列表:
运行代码:
1 |
|
-XX:+PrintGC
:输出GC日志。类似:-verbose:gc
JVM参数配置:
1 |
|
输出:
1 |
|
-XX:+PrintGCDetails
:输出GC的详细日志。
JVM参数配置:
1 |
|
输出:
1 |
|
-XX:+PrintGCTimeStamps
:输出GC的时间戳(以基准时间的形式)。
JVM参数配置:
1 |
|
输出:
1 |
|
主要区别是前面几行的前面显示的数字。下同。
-XX:+PrintGCDateStamps
:输出GC的时间戳(以日期的形式,包含日期和时间)。
JVM参数配置:
1 |
|
输出:
1 |
|
-XX:+PrintHeapAtGC
:在进行GC的前后打印出堆的信息。
JVM参数配置:
1 |
|
输出:
1 |
|
-Xloggc:./logs/gc.log
:日志文件的输出路径。可以把GC日志保存到文件中。这里的相对位置不是相对当前运行的文件,而是项目的位置,所以创建文件夹logs时需要建立在项目名称的文件夹目录下
。
JVM参数配置:
1 |
|
然后查看文件即可。
📢注意:必须要先建logs文件夹,并且相对位置是项目
,而不是运行的代码文件处!!!
日志补充说明
- “ [ GC”和” [ Full GC”说明了这次垃圾收集的停顿类型,如果有”Full”则说明GC发生了STW。
- 使用Serial收集器在新生代的名字是Default New Generation,因此显示的是” [ DefNew”。
- 使用ParNew收集器在新生代的名字会变成” [ ParNew”,意思是”Parallel New Generation”。
- 使用Parallel Scavenge收集器在新生代的名字是 “ [ PSYoungGen”。
- 老年代的收集器和新生代道理一样,名字也是收集器决定的。
- 使用G1收集器的话,会显示为” [ garbage-first heap”。
- Allocation Failure:表明本次引起GC的原因是因为在年轻代中没有足够的空间能够存储新的数据了。
- [ PSYoungGen:5986K -> 696K(8704K) ] 5986K-> 704K(9216K):中括号:GC回收前年轻代大小,回收后大小,(年轻代总大小);括号外:GC回收前年轻代和老年代大小,回收后大小,(年轻代和老年代总大小)
- user代表用户态回收耗时,sys内核态回收耗时,rea实际耗时。由于多核的原因,时间总和可能会超过real时间。部分输出:
1 |
|
GC:
Full GC:
![](/Users/dragonone/Library/Application Support/typora-user-images/image-20220623160540852.png)
GC日志分析工具
在线分析日志文件网站,GCEasy 。在上传文件时,选择上面最后一个参数生成的日志文件即可。使用如下图:
本文作者: 墨水记忆
本文链接: https://tothefor.com/DragonOne/12ca1782.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!