【问题标题】:How to properly set the G1GC options for a server with 22G heap如何为具有 22G 堆的服务器正确设置 G1GC 选项
【发布时间】:2019-08-19 11:16:57
【问题描述】:

我正在设置一个新的 JAVA 服务器,堆大小设置为 22G,并且将使用 G1GC 算法。我已经阅读了所有的 oracle 文档,相信这是我们需要的,但仍有一些问题:

1> -XX:G1HeapRegionSize 应该是什么?数字必须是二的幂吗?如果是这样,我应该设置 8M 得到 2816 个区域,还是设置 16M 得到 1408 个区域?

2> 你认为我们应该明确设置 -XX:ParallelGCThreads 和 -XX:ConcGCThreads 吗?如果省略它们,是否会根据服务器逻辑处理器将它们设置为默认数字?或者只是设置为一个固定的数字?

3> 下面的选项怎么样,我错过了什么吗?由于这是我们第一次使用 G1GC,所以我不知道是否需要设置其他与 G1 相关的选项,因为它们都有推荐的默认值。 (描述于https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/g1_gc_tuning.html

// 常用选项

-Xms22G -Xmx22G -Xss1024K

// G1 选项

-XX:+UseG1GC -XX:MaxGCPauseMillis=500 -XX:G1HeapRegionSize=16

// 日志

-XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps

-XX:+PrintGCApplicationStoppedTime -XX:+PrintGCApplicationConcurrentTime -XX:-PrintCommandLineFlags

4> 你认为第一次可以大致正确地做事情吗?我的意思是没有内存溢出或耗尽。还是您认为我们总是需要更仔细地调整参数才能使事情多次正确?

5> 还有其他建议吗?

有点长,谢谢阅读。任何帮助将不胜感激。谢谢!

【问题讨论】:

  • 是什么让您认为您应该设置特定选项?您真正需要的唯一选项是-XX:+UseG1GC-Xmx22G。如果您确实有理由偏离默认设置,您应该只更改一个选项。您的问题表明您没有这样的理由,事实上,您似乎从未尝试使用默认值运行您的服务器。 过早的优化是在浪费时间。和过时的选项。例如,Java 8 没有 Perm Gen,因此任何与 Perm Gen 相关的选项都是无用的。
  • 好的。谢谢你的帮助。我会在服务器上做更多的测试,看看结果。

标签: java garbage-collection jvm jvm-hotspot


【解决方案1】:

引用您链接到的文档:

G1 GC 是一种自适应垃圾收集器具有使其无需修改即可高效工作的默认设置

所以,最明显的建议......基于文档本身......是在没有任何 GC 调整的情况下运行 JVM。只需给它堆大小,然后选择 GC:

-Xmx22G -XX:+UseG1GC

G1GC 的设计让您可以这样使用它并获得良好的性能。

如果效果足够好,这就是您需要做的一切。如果您发现性能问题,请开始考虑调整...根据您所看到的问题的性质。

调整只是为了它是浪费时间。

当您(还)不知道性能问题时进行调优有点像戴着眼罩进行目标射击。比什么都不做更容易使事情变得更糟。

最后,“最佳”GC 设置将取决于您的应用程序和工作负载的各个方面,以及您的调优目标。我们可能提出的任何建议都纯属猜测。

【讨论】:

  • 好的。谢谢你的帮助。我会在服务器上做更多的测试,看看结果。
  • 最后,我对以下 JVM 选项比较满意 -Xms20g -Xmx20g -Xss1024K -XX:MetaspaceSize=128M -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:+UseStringDeduplication -XX: +UnlockExperimentalVMOptions -XX:G1NewSizePercent=40 谢谢,
【解决方案2】:

最佳 G1GC 选项在很大程度上取决于您的应用程序及其运行的基础架构。为了获得最佳性能,您需要测试各种组合并查看哪些组合在您的环境中表现更好。您可以使用免费的调优工具,例如 Optimizer Studio,它可以自动调优这些选项(以及其他 JVM 参数)。

【讨论】:

    【解决方案3】:

    没有一套完美的 GC 标志可以应用于所有应用程序。 我们可以先尝试使用默认值,然后使用工具(gceasygcviewer)来分析 GC 日志,看看有什么可以进一步改进的地方。

    这是我在调整 G1GC 时的笔记,希望你能从中找到有用的信息 How Garbage First Garbage Collector (G1GC) affected the performance of our back-end

    【讨论】:

    • 我已经阅读了这篇文章。它确实对我有很大帮助,因为我也有同样的担忧 ------ 如果 HIOP 45 与服务器常见的 MEM 用法几乎相同怎么办?那么 GC 会占用过多的 CPU 时间吗?我有很多顾虑,因为这是一个非常繁忙的服务器,并且总是需要工程师团队为我做更改。所以我不希望它在 GC 更新期间经常死掉。我同意你们的建议,我们应该先用默认选项进行测试。然后根据 GC 日志进行调优。
    猜你喜欢
    • 2020-11-12
    • 2017-07-07
    • 1970-01-01
    • 1970-01-01
    • 2013-10-27
    • 1970-01-01
    • 1970-01-01
    • 2018-07-18
    • 2018-09-01
    相关资源
    最近更新 更多