有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

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

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

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>;还有其他建议吗

有点长,谢谢你的阅读。任何帮助都将不胜感激。谢谢大家!


共 (3) 个答案

  1. # 2 楼答案

    引用您链接到的文档:

    The G1 GC is an adaptive garbage collector with defaults that enable it to work efficiently without modification.

    所以,最明显的建议是。。。根据文件本身。。。就是在没有任何GC调优的情况下运行JVM。只需给出堆大小,然后选择GC:

    -Xmx22G -XX:+UseG1GC
    

    G1GC是设计的,因此您可以通过这种方式使用它并获得良好的性能

    如果效果足够好,那就是你需要做的。如果你发现性能问题,那么就开始调整。。。基于你所看到的问题的性质

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

    当你(还)不知道性能问题时进行调整有点像蒙着眼睛射击靶子。如果你什么都不做,你很可能会让事情变得更糟

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

  2. # 3 楼答案

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