You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OracleJDK/Hotspot 9 G1GC日志标记:如何分析各阶段耗时

JDK 9+ G1GC 日志配置:获取各阶段耗时

嘿,刚好熟悉这块!JDK 9 开始 HotSpot 引入了统一日志框架,彻底替换了 JDK 8 及以前一堆零散的 -XX:+PrintXXX 参数。不过不用担心,我们可以通过新的 -Xlog 参数组合,轻松拿到和旧版本一样(甚至更详细)的 Young GC 各阶段耗时信息。

核心配置思路

JDK 9+ 用 -Xlog 统一管理日志,你需要指定日志标签、日志级别、输出位置和附加字段。针对你的需求,重点关注以下标签:

  • gc:基础 GC 事件日志
  • gc+phases:GC 各阶段的详细耗时(对应你要的 G1Ergonom... 这类阶段信息)
  • gc+ergo:G1 自适应调整策略日志(对应旧版的 PrintAdaptiveSizePolicy)
  • gc+age:对象晋升年龄分布(对应旧版的 PrintTenuringDistribution)
  • gc+application:应用并发/暂停时间(对应旧版的 PrintGCApplicationConcurrentTime 和 PrintGCApplicationStoppedTime)

完整配置示例

直接用这个配置就能覆盖你旧版所有需求:

-Xlog:gc,gc+phases,gc+ergo,gc+age,gc+application=info:file=gc.log:time,uptime,level,tags

参数解释:

  1. 日志标签与级别:gc,gc+phases,...=info 表示开启这些标签的 info 级别日志,足够获取阶段耗时和核心细节;如果需要更细粒度的调试信息,可以把级别改成 debug。
  2. 输出位置:file=gc.log 指定日志输出到文件,你也可以改成 stdout 直接打印到控制台。
  3. 附加字段:time,uptime,level,tags 会输出日志的日期时间、JVM 启动时长、日志级别和标签,对应旧版的 PrintGCDateStamps、PrintGCTimeStamps 等功能。

额外说明

  • JDK 9 开始 G1GC 已经是默认垃圾收集器,所以 -XX:+UseG1GC 可以不用显式指定,当然加上也没问题。
  • 旧版的 -XX:+UnlockCommercialFeatures 和 -XX:+UnlockExperimentalVMOptions 在 JDK 9 里已经不再需要,G1 的所有特性都默认开放了。
  • 如果想单独查看 Young GC 的阶段耗时,可以把标签细化为 gc+phases+young=info,过滤掉其他 GC 类型的日志。

日志示例片段

配置生效后,你会看到类似这样的 Young GC 阶段耗时日志:

[2024-05-20T14:35:22.456+0800][info][gc,phases] GC(45) Pause Young (Normal) (G1 Evacuation Pause) 120M->65M(512M) 28.7ms
[2024-05-20T14:35:22.456+0800][info][gc,phases] GC(45) Phase 1: Mark live objects 6.2ms
[2024-05-20T14:35:22.456+0800][info][gc,phases] GC(45) Phase 2: Prepare evacuation 1.1ms
[2024-05-20T14:35:22.456+0800][info][gc,phases] GC(45) Phase 3: Evacuate objects 18.3ms
[2024-05-20T14:35:22.456+0800][info][gc,phases] GC(45) Phase 4: Update references 3.1ms

内容的提问来源于stack exchange,提问作者Michael P

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:54:51