【发布时间】: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