在GCViewer Heap区域不分为新旧两个区域

问题描述

我用 GCViewer 分析了一个 GClog,它给出了这个结果。 GCViewer-result

我是 GCViewer 的新手。

在我看来,结果应该分为两个领域,即新的和旧的。 但是没有这样的区域,只有红色区域。 在查看配置中,不会选中“总堆”。选中“Tenured Generation”和“Young Generation”。我怎样才能使这个结果包括新旧区域?

这让我很难分析内存情况。谁能给我建议?

解决方法

我认为这会有所帮助, 与其说是问题,不如说是配置问题。

检查工具报告here

另外,如果你分享你的 JAVA 版本会更容易。 (JDK) 因为您似乎没有使用分代 GC。

更像是一个并行 GC。所以它可能是JAVA 8。 我认为您使用默认的 GC。你应该用 -XX:+UseG1GC

改变它

我为什么这么说??因为你没有这样的东西:

Tenured Heap (usage/max): ???M (???%) / ???M

Young Heap (usage/max): ???M (???%) / ???M
,

有同样的问题。 GCViewer 有 G1 日志的问题。 GCViewer 开发者在 github 上的开发者网站:

支持的verbose:gc格式有:...

部分支持 OpenJDK 9 / 10 统一日志格式 -Xlog:gc:,以下配置即可使用

  •    -Xlog:gc:file="path-to-file" (uses defaults)
    
  •    -Xlog:gc=info:file="path-to-file":tags,uptime,level (minimum configuration needed)
    
  •    -Xlog:gc*=trace:file="path-to-file":tags,time,level (maximum configuration supported,additional tags ok,but ignored; additional decorations will break parsing)
    

我使用带有 G1 的 OpenJDK 11。 设置“-Xlog:gc*=trace”后,您会看到所有 GCViewer 行和区域但丢失了:

  • 老一代
  • 使用过的永久堆
  • 初始标记级别

活动详情标签内容非常好。

如果您有兴趣,请参阅 GCViever 源中的 imp/DataReaderUnifiedJvmLogging.java 过滤器,以获取有关帐户中采用的 gc 日志行的信息。

Reference for G1GC tuning with advices for log config in problem situations

Reference for the Java unified logging framework usage