【问题标题】:What is the Metadata GC Threshold and how do I tune it?什么是元数据 GC 阈值以及如何调整它?
【发布时间】:2014-08-11 19:59:51
【问题描述】:

在一个应用程序中,我有以下-verbose:gc

[GC (Metadata GC Threshold)  8530310K->2065630K(31574016K), 0.3831399 secs]
[Full GC (Metadata GC Threshold)  2065630K->2053217K(31574016K), 3.5927870 secs]
[GC (Metadata GC Threshold)  8061486K->2076192K(31574016K), 0.0096316 secs]
[Full GC (Metadata GC Threshold)  2076192K->2055722K(31574016K), 0.9376524 secs]
[GC (Metadata GC Threshold)  8765230K->2100440K(31574016K), 0.0150190 secs]
[Full GC (Metadata GC Threshold)  2100440K->2077052K(31574016K), 4.1662779 secs]

这个“元数据 GC 阈值”是什么以及如何降低它。注意:虽然 Full GC 需要很长时间清理,但实际上清理的并不多,也就是说,如果不这样做会更好。

【问题讨论】:

    标签: java performance garbage-collection java-8


    【解决方案1】:

    日志信息告诉我们 GC 是由 Metaspace 分配失败引起的。 元空间保存类元数据。他们在 Java 8 中 have appeared 替换 PermGen

    Here are 调整元空间的一些选项。
    您可能需要设置以下一个或多个选项:

    -XX:MetaspaceSize=100M 设置分配的类元数据空间的大小,第一次超出时将触发垃圾回收;

    -XX:InitialBootClassLoaderMetaspaceSize=32M增加启动类加载器元空间;

    -XX:MinMetaspaceFreeRatio=50 让 Metaspaces 增长得更积极;

    -XX:MaxMetaspaceFreeRatio=80 减少元空间收缩的机会;

    -XX:MinMetaspaceExpansion=4M 元空间扩展的最小尺寸;

    -XX:MaxMetaspaceExpansion=16M 在没有 Full GC 的情况下扩展元空间的最大大小。

    【讨论】:

    • JDK8 中的 Metasapce 在 64 位 VM 上默认设置为 21MB。对于高性能应用程序,您可能需要考虑将 min,init 设置为 max(就像 JDK7 中的 PermGen 一样)并限制高水位标记大小比 Metaspace Full GC 的成本很高,因为它们也运行旧堆 Full GC,因此并从增加的 GC 暂停时间增加到总应用程序 p95、p99 运行时延迟。 -XX:MetaspaceSize=1024m -XX:MaxMetaspaceSize=1024m -XX:MinMetaspaceFreeRatio=0 -XX:MaxMetaspaceFreeRatio=100
    • 似乎这些选项中的大多数都没有记录在 java8 (docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html) 的手册页中,而您在获得这些选项的地方发布的那篇文章是从 2014 年开始的,这些选项是被删除还是被删除只是没有证件?
    • @mgrandi 这些标志从未在该页面上列出。大多数 VM 标志都没有很好地记录在案,而不是在源代码或博客文章中。
    • @Eugene 答案早在JDK-8151845 之前就已经写好了。如果您愿意,请随意编辑。
    【解决方案2】:

    虽然已经有一个公认的答案,但想提一下:

    -XX:MaxMetaspaceSize=<NNN> where <NNN> 是为类元数据分配的最大空间量(以字节为单位)。

    同样来自here

    已触发死类和类加载器的垃圾收集 一旦类元数据使用量达到“MaxMetaspaceSize”。

    有一个可用选项列表in this post

    【讨论】:

    • 这比公认的答案更准确地回答了这个问题。
    猜你喜欢
    • 2016-12-05
    • 2012-08-27
    • 2014-08-22
    • 2021-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-24
    相关资源
    最近更新 更多