【问题标题】:jstat for G1 Garbage CollectorG1 垃圾收集器的 jstat
【发布时间】:2017-05-24 11:48:22
【问题描述】:

我正在尝试使用 jstat 分析带有 G1 垃圾收集器的 Java 进程的内存使用模式:

jstat -gc <Process_ID> 60s

输出如下所示:

 S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT   
 0.0   229376.0  0.0   229376.0 1998848.0 1253376.0 16646144.0  301183.5  50176.0 40977.8 8704.0 5303.9     10    0.296   0      0.000    0.296

据了解,jstat 提供有关年轻代 GC 和 Full GC 的信息。但它不区分 Minor 和 Mixed 集合。考虑到在经过良好调整的 G1 收集器中,不需要 Full GC,并且大多数情况下 Mixed GC 负责处理 Tenured 代,我想获取有关不同类型 YGC 的信息。

我应该使用 jstat 的任何特定选项吗?

我在 Open JDK 论坛上注意到了this discussion,但不确定目前是否有这样的功能。

请注意,我知道 GC 日志可以帮助我,但我对 jstat 特别感兴趣(考虑到它重量轻,可以根据需要用于生产)。

【问题讨论】:

  • GC 日志也应该足够轻量级以供生产使用。

标签: java jvm openjdk g1gc


【解决方案1】:

你可以看这个博客https://blogs.oracle.com/poonam/entry/understanding_g1_gc_logs,里面有更详细的了解G1GC日志的信息

【讨论】:

  • 如前所述,我正在寻求了解 GC 日志。但我的问题是关于 jstat。
【解决方案2】:

至少从 JDK11 开始,-gc 有三个不同的时间计数器:

  1. YGCT:Young Garbage Collection Time,用于 Young-only 垃圾收集。
  2. FGCT:完整的垃圾收集时间,用于后备完全停止世界的 GC。
  3. GCT:所有类型的垃圾回收所花费的总时间。

所以,young-only 被计入 YGCT 和 GCT,mixed 只被计入 GCT(不确定 Young 部分是否计入 YGCT,但我根据时间怀疑是这样),full/fallback 进入 FGCT 和 GCT .因此,GCT 减去 FGCT 减去 YGCT 等于在混合集合中收集 old-gen 所花费的时间。

【讨论】:

    猜你喜欢
    • 2014-02-19
    • 2011-03-18
    • 1970-01-01
    • 1970-01-01
    • 2019-02-08
    • 1970-01-01
    • 1970-01-01
    • 2016-05-27
    • 2018-01-25
    相关资源
    最近更新 更多