用于 G1 垃圾收集器的 jstat



我正在尝试使用 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 和完整 GC 的信息。但它不区分次要集合和混合集合。考虑到在一个经过良好调整的 G1 收集器中,不需要完整的 GC,并且大多数混合 GC 负责终身世代,我想获得有关不同类型的 YGC 的信息。

我应该使用 jstat 有什么特定的选项吗?

我在 Open JDK 论坛上注意到了这个讨论,但不确定此时是否提供这样的功能。

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

您可以在 https://blogs.oracle.com/poonam/entry/understanding_g1_gc_logs 看到此博客,其中包含有关了解 G1GC 日志的更多详细信息

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

  1. YGCT:年轻的垃圾收集时间,用于仅限年轻的垃圾收集。
  2. FGCT:完整的垃圾回收时间,用于回退完全停止世界 GC。
  3. GCT:花在所有类型的垃圾回收上的总时间。
因此,仅年轻部分被计入 YGCT 和 GCT,混合只计入 GCT

(不确定年轻部分是否计入 YGCT,但我根据时间怀疑是这样),完整/后备归 FGCT 和 GCT。 因此,GCT 减去 FGCT 减去 YGCT 等于在混合集合中收集旧一代所花费的时间。

最新更新