【jvm】调优之gc日志配置

用好GC是调优中不可绕开的一个点,而对于了解GC情况,GC日志显的尤为重要。那如何获取GC日志呢?

接下来带你一步一步,配置一个 GC 日志的最佳实验。

目录

打印基本 GC 信息

打印对象分布

GC后打印堆数据

打印STW时间

可选打印内容

日志文件输出

总结:


打印基本 GC 信息

打印 GC 日志的第一步,开启 GC 打印的参数

-XX:+PrintGCDetails -XX:+PrintGCDateStamps

打印对象分布

本文可分析 GC 时的晋升情况和晋升导致的高暂停

-XX:+PrintTenuringDistribution

GC后打印堆数据

每次发生 GC 时,对比一下 GC 前后的堆内存

-XX:+PrintHeapAtGC

打印STW时间

STW(stop-the-world)时间时间是 GC 最重要的指标

-XX:+PrintGCApplicationStoppedTime

可选打印内容

# 进入STW阶段之前,需要要找到一个合适的 safepoint ,这个指标也比较重要
-XX:+PrintSafepointStatistics -XX:PrintSafepointStatisticsCount=1
# 打印Reference处理信息
-XX:+PrintReferenceGC

日志文件输出

推荐的GC日志文件输出格式

# 输出路径 %t为时间
-Xloggc:/XXX/XXX/gc-%t.log
# 开启日志文件分割
-XX:+UseGCLogFileRotation 
# 文件个数
-XX:NumberOfGCLogFiles=10
# 每个文件上限大小
-XX:GCLogFileSize=20M

文件输出如下:

【jvm】调优之gc日志配置_第1张图片

日志如下(截取部分日志): 

通过分析gc日志可以知道,full GC失败。就可以去分析程序是内存太小,还是有逻辑bug了!

【jvm】调优之gc日志配置_第2张图片

总结:

# 推荐
-XX:+PrintGCDetails 
-XX:+PrintGCDateStamps 
-XX:+PrintTenuringDistribution 
-XX:+PrintHeapAtGC 
-XX:+PrintGCApplicationStoppedTime

# 可选
# -XX:+PrintReferenceGC 
# -XX:+PrintSafepointStatistics 
# -XX:PrintSafepointStatisticsCount=1

# gc日志文件
-Xloggc:/xx/xx/gc-%t.log
-XX:+UseGCLogFileRotation 
-XX:NumberOfGCLogFiles=10
-XX:GCLogFileSize=10M

参考:

https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/generations.html

个人网站:www.sanjie.site

个人微信公众号:叁戒

 

网站ai、游戏、摸鱼等板块,欢迎学习ai和玩游戏,有任何问题网站或公众号留言,欢迎交流沟通

你可能感兴趣的:(日常实践经验,jvm,java,经验分享)