如何为具有 22G 堆的服务器正确设置 G1GC 选项
How to properly set the G1GC options for a server with 22G heap
我正在设置一个新的 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> 还有其他建议吗?
有点长,感谢阅读。任何帮助将不胜感激。谢谢!
引用您链接到的文档:
The G1 GC is an adaptive garbage collector with defaults that enable it to work efficiently without modification.
因此,最明显的建议……基于文档本身……是 运行 JVM,而不进行任何 GC 调整。只需给它堆大小,然后 select GC:
-Xmx22G -XX:+UseG1GC
G1GC 是设计的,因此您可以这样使用它并获得良好的性能。
如果它运行良好,这就是您需要做的全部。如果您看到性能问题,然后开始考虑调优……根据您所看到的问题的性质。
为了调整而调整是浪费时间。
在您(还)不知道性能问题时进行调优有点像蒙着眼罩打靶。与什么都不做相比,你很可能让事情变得更糟。
最后,“最佳”GC 设置将取决于您的应用程序和工作负载的各个方面,以及您的调整目标。我们可能提出的任何建议都纯属猜测。
没有一套完美的 GC 标志可以适用于所有应用程序。
我们可以先尝试使用默认值,然后使用工具(gceasy, gcviewer)分析 GC 日志,看看可以进一步改进的地方。
这是我调优G1GC时的笔记,希望你能在那里找到有用的信息
How Garbage First Garbage Collector (G1GC) affected the performance of our back-end
最佳 G1GC 选项在很大程度上取决于您的应用程序及其运行的基础架构。要获得最佳性能,您需要测试各种组合并查看哪种组合在您的环境中表现更好。您可以使用像 Optimizer Studio 这样的免费调整工具,它可以自动调整这些选项(以及其余的 JVM 参数)。
我正在设置一个新的 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> 还有其他建议吗?
有点长,感谢阅读。任何帮助将不胜感激。谢谢!
引用您链接到的文档:
The G1 GC is an adaptive garbage collector with defaults that enable it to work efficiently without modification.
因此,最明显的建议……基于文档本身……是 运行 JVM,而不进行任何 GC 调整。只需给它堆大小,然后 select GC:
-Xmx22G -XX:+UseG1GC
G1GC 是设计的,因此您可以这样使用它并获得良好的性能。
如果它运行良好,这就是您需要做的全部。如果您看到性能问题,然后开始考虑调优……根据您所看到的问题的性质。
为了调整而调整是浪费时间。
在您(还)不知道性能问题时进行调优有点像蒙着眼罩打靶。与什么都不做相比,你很可能让事情变得更糟。
最后,“最佳”GC 设置将取决于您的应用程序和工作负载的各个方面,以及您的调整目标。我们可能提出的任何建议都纯属猜测。
没有一套完美的 GC 标志可以适用于所有应用程序。 我们可以先尝试使用默认值,然后使用工具(gceasy, gcviewer)分析 GC 日志,看看可以进一步改进的地方。
这是我调优G1GC时的笔记,希望你能在那里找到有用的信息 How Garbage First Garbage Collector (G1GC) affected the performance of our back-end
最佳 G1GC 选项在很大程度上取决于您的应用程序及其运行的基础架构。要获得最佳性能,您需要测试各种组合并查看哪种组合在您的环境中表现更好。您可以使用像 Optimizer Studio 这样的免费调整工具,它可以自动调整这些选项(以及其余的 JVM 参数)。