问题描述
我用 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