繁体   English   中英

如何为具有 22G 堆的服务器正确设置 G1GC 选项

[英]How to properly set the G1GC options for a server with 22G heap

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

1> -XX:G1HeapRegionSize 应该是什么? 数字必须是 2 的幂吗? 如果是这样,我应该设置 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> 还有其他建议吗?

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

引用您链接到的文档:

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

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

-Xmx22G -XX:+UseG1GC

G1GC 的设计使您可以以这种方式使用它并获得良好的性能。

如果它运行得足够好,这就是你需要做的。 如果您发现性能问题,则开始考虑调优……基于您所看到问题的性质。

仅仅为了它而调整是浪费时间。

在您(还)不知道性能问题时进行调整有点像蒙着眼睛打靶。 与你什么都不做相比,你有可能让事情变得更糟。

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

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

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

这是我在调优 G1GC 时的笔记,希望你能在那里找到有用的信息Garbage First Garbage Collector (G1GC) 如何影响我们后端的性能

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM