跳至正文
来两杯美式
返回

GC 调优入门:参数、工具与参考值

By 来两杯美式
发布于更新于

这是「一文拿下 GC」系列第一篇。GC 调优是 Java 后端的必备技能——掌握日志参数、工具、参考值三件套,线上问题排查就有了第一道防线。

一、配置 GC 日志参数

排查 GC 问题的第一步是拿到 GC 日志。HotSpot 提供了一系列参数把 GC 行为输出到文件或控制台:

-XX:+PrintGCDetails            # GC 时打印详细日志
-XX:+PrintGCTimeStamps         # 打印 GC 时间戳(相对 JVM 启动时间)
-XX:+PrintGCDateStamps         # 打印 GC 日期(绝对时间戳)
-Xloggc:./logs/gc.log          # 把 GC 日志输出到指定文件

四个参数通常一起配置——才能拿到「时间 + 日期 + 详细 + 文件」完整的 GC 日志。

2017 年冷知识:当年 PrintGCDetails 是 HotSpot 最常用的 GC 日志开关,G1 下还会额外打 region 信息。生产环境强烈建议输出到独立日志文件,方便后续分析。

二、GC 日志长什么样

直接看一段实际的 GC 日志(Parallel Scavenge + ParOldGen):

[PSYoungGen: 36857K->5114K(36864K)] 41977K->14380K(121856K), 0.0274265 secs] [Times: user=0.07 sys=0.01, real=0.02 secs]

字段解读

三、GC 日志分析工具

3.1 在线工具

3.2 命令行工具

# 查看 JVM 进程启动时长(看 JVM 重启时间点)
ps -p <pid> -o etime

# GC 统计:YGC(young GC 次数)、YGCT(young GC 总时长)、FGC(full GC 次数)、FGCT(full GC 总时长)
jstat -gcutil <pid>

通过 jstat 的输出可以算出:

2017 年冷知识:当年 gceasy 刚上线不久,是排查 GC 问题的神器——比手算 jstat 输出直观很多。后来(2018+)被各类 APM 工具集成,2020 年后基本是自动化采集 + AI 异常检测了。

GC 日志示例:Parallel Scavenge + ParOldGen + Metaspace

四、参考值

调优的核心目标是「该 GC 才 GC,不该 GC 别频繁」。基于生产经验:

4.1 Young GC

4.2 Full GC

4.3 Old GC

2017 年冷知识:当年还没有 G1 普及,生产环境多半在用 CMS——Full GC 频率就是 CMS 调优的核心 KPI。今天(2026 年)G1 是 OpenJDK 8+ 默认收集器,参考值有所变化,但「Full GC 必须避免」这一点没变。

五、查看当前使用的垃圾收集器

# 查看 JVM 默认的垃圾收集器
java -XX:+PrintCommandLineFlags -version

# 查看指定 JVM 进程是否开启了某种收集器
jinfo -flag UseParallelGC <pid>      # 是否使用 Parallel GC
jinfo -flag UseConcMarkSweepGC <pid> # 是否使用 CMS
jinfo -flag UseParNewGC <pid>        # 是否使用 ParNew

jinfo -flag <参数> <pid> 返回 -XX:+<参数> 表示开启,-XX:-<参数> 表示关闭。

小结

GC 调优不是「调参数让 GC 不发生」——GC 该发生还得发生,调的是「频率 + 时长 + 时机」。这一篇建立基本的「日志 + 工具 + 参考值」三件套,下一篇开始讲「GC 怎么判断对象该死」。


分享这篇文章:
通过邮件分享这篇文章✓ 链接已复制
所属专题
Java GC
第 1 / 5 篇
查看系列全部文章
  1. 01.GC 调优入门:参数、工具与参考值
  2. 02.GC 怎么判断对象「该死了」:引用计数 vs 可达性分析
  3. 03.垃圾收集算法三板斧:标记-清除、复制、标记-整理
  4. 04.垃圾收集器大阅兵:Serial/ParNew/Parallel/CMS/G1
  5. 05.堆内存区域全景:Eden/Survivor/Old + PermGen/Metaspace 演进

上一篇
GC 怎么判断对象「该死了」:引用计数 vs 可达性分析
下一篇
一文拿下 JVM(锁篇):synchronized 锁的升级与三种锁对比