一篇带你搞定⭐《生产环境JVM日志配置》⭐

7 篇文章 0 订阅

自JDK17发布以来,其免费商用、持续维护,使得许多公司开始尝试JDK17,笔者也在最近升级了JDK17且部署上了生产环境,但重要的JVM日志输出配置确没有配置清除。
本文主要是笔者在翻阅后,提供到一套适用生产环境的JVM日志配置。

Start

下文将从以下三个级别来推荐JVM日志输出方案:

等级描述
必备这些配置基本上是作为项目运行的必备条件
增强这些配置可以出现在实际运行中,可以帮助你更加详细分析
调试这些配置只为项目的调试监控

笔者推荐的是

-XX:+PrintCommandLineFlags
-Xlog:gc*,safepoint,gc+heap=debug,gc+ergo*=trace,gc+age=trace,gc,phases=trace:file=gc.log:level,tags,time,uptime,pid:filesize=104857600,filecount=5

一. 必备

本节给出的是在生产环境下,⭐最基本也是必须的配置

JDK8
JVM配置描述
-Xloggc:/path/to/gc.log写入 GC 日志的路径
-XX:+UseGCLogFileRotation启用 GC 日志文件轮换
-XX:NumberOfGCLogFiles=5要保留的轮换 GC 日志文件数
-XX:GCLogFileSize=104857600用于启动轮换的每个 GC 日志文件的大小
-XX:+PrintGCDetails详细的GC日志
-XX:+PrintGCDateStamps实际日期和时间戳
-XX:+PrintGCApplicationStoppedTime应用程序在 GC 期间停止的时间量
-XX:+PrintGCApplicationConcurrentTime应用程序在 GC 之间运行的时间量
-XX:-PrintCommandLineFlags打印 GC 日志中的所有命令行标志
JDK9+

JDK9+统一了日志输出,以标签来过滤日志输出,日志框架:Unified Logging

JVM配置描述
:file=/opt/gc.log写入 GC 日志的路径
:filesize=104857600,filecount=5启用 GC 日志文件轮换,要保留的轮换 GC 日志文件数
gc*详细的GC日志
level,tags,time,uptime,pid实际日期和时间戳 与关键信息
safepoint应用程序在 GC 期间停止的时间量
-XX:-PrintCommandLineFlags打印 GC 日志中的所有命令行标志

以上配置均在一行内:
-Xlog:gc*,safepoint:file=gc.log:level,tags,time,uptime,pid:filesize=104857600,filecount=5
-XX:-PrintCommandLineFlags

二. 增强

可以被选择,帮助您在生产环境下参考更加详细的日志

JDK8
JVM配置描述
-XX:+PrintAdaptiveSizePolicy有关GC工程的详细信息
-XX:+PrintTenuringDistribution幸存者空间的使用和分配
-XX:+PrintReferenceGC处理引用所花费的时间
JDK9+
JVM配置描述
gc+ergo*=trace有关GC工程的详细信息
gc+age=trace幸存者空间的使用和分配
gc,phases=trace处理引用所花费的时间

以上配置均在一行内:
-Xlog:gc*,safepoint,gc+ergo*=trace,gc+age=trace,gc,phases,ref:file=gc.log:level,tags,time,uptime,pid:filesize=104857600,filecount=5

三. 调试

这里的配置基本只适用于调试阶段

JDK8
JVM产数描述
-XX:+UnlockDiagnosticVMOptions解锁诊断虚拟机操作系统
-XX:+G1SummarizeConcMark汇总 JVM 出口处的并发标记
-XX:+G1PrintHeapRegions打印为分配、清理、重用、压缩、cset、提交、失败等选择的堆区域…
-XX:+G1PrintRegionLivenessInfo在每个并发标记周期之前和之后打印每个旧区域的上一个和下一个活动数据
-XX:+G1SummarizeRSetStats -XX:G1SummarizeRSetStatsPeriod=1每 X 打印一次 RSet 处理信息,其中 X 以 GC 循环为单位进行测量
-XX:+PrintSafepointStatistics -XX:PrintSafepointStatisticsCount=1 -XX:+LogVMOutput -XX:LogFile=/path/to/gc.log打印有关安全点同步的原因和一些详细信息。可以控制打印前要收集的事件数。默认情况下,日志到 STDOut - LogVMOutput 可以将其推送到文件
-XX:+UnlockExperimentalVMOptions解锁实验性VMOptions
-XX:G1LogLevel=fine, finer, finest增加集合的日志记录详细程度
-XX:+G1TraceEagerReclaimHumongousObjects在每次收集期间打印有关活体和死物的详细信息 巨大的物体
-XX:+G1ConcRegionFreeingVerbose调试 JVM
JDK9+
JVM产数描述
-XX:+G1SummarizeConcMark汇总 JVM 出口处的并发标记
gc,region=trace打印为分配、清理、重用、压缩、cset、提交、失败等选择的堆区域…
gc,liveness=trace在每个并发标记周期之前和之后打印每个旧区域的上一个和下一个活动数据
region*=all在每次收集期间打印有关活体和死物的详细信息 巨大的物体

还有写就懒得找了
读者们可以设置全量输出来检擦
-Xlog:all=trace:file=gc.log:level,tags,time,uptime,pid

End

笔者推荐,在实际生产部署中使用 增强 and 必备 两级别的配置,输出的日志不算太多。
可能有些读者看不太懂JDK9后的日志配置,推荐您看:博客

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值