为什么JVM计算的PS生存空间大小对于并行收集器来说太低



我正在为托管在Linux Intel procesor 80 cores machine上的java应用程序使用JDK1.6.0_16 JVM。

在启动Java应用程序时,我只配置了两个选项JVM选项中的-Xms2048m -Xmx8000m(在java命令之后)。我看到PS Old Gen计算为5.21G,PS Eden计算为2.6G,但PS Survivor空间为25MB

我在生产中有完全相同的JVM,其中PS幸存者空间大小显示为888MB。我在java任务控制内存选项卡中看到了这些大小。缓存大小(/proc/cpuinfo的输出)在UAT和生产框中都显示24656

不要认为这对JVM有任何影响,但仍然提到在启动JVM时机器上的负载非常低。

你能告诉JVM在计算PS幸存者空间大小时考虑哪些参数吗

来自oraclegc调优文章1和文章2:

幸存者空间大小

您可以使用参数SurvivorRatio来调整幸存者空间的大小,但这通常对性能不重要。例如,-XX:SurvivorRatio=6将eden和幸存者空间之间的比例设置为1:6。

CCD_ 11。

如果幸存者空间太小,则复制集合会直接溢出到终身生成中。如果幸存者空间太大,它们将毫无用处地清空

NewSizeMaxNewSize参数控制新一代的最小和最大大小。通过将这些参数设置为相等来调节新一代的规模。The bigger the younger generation, the less often minor collections occur

NewRatio:年轻一代相对于老一代的大小由NewRatio控制。例如,设置-XX:NewRatio=3意味着老一代和年轻一代的比例是1:3the combined size of eden and the survivor spaces will be fourth of the heap

正如Peter Lawrey正确引用的,设置幸存者取决于应用程序的类型。根据Oracle的gc调优文章,以下是指导原则。

  1. CCD_ 20。然后根据年轻一代的规模绘制您的性能指标,以找到最佳设置

  2. If the total heap size is fixed, then increasing the young generation size requires reducing the tenured generation size。保持终身生成足够大,以容纳应用程序在任何给定时间使用的所有实时数据,再加上一定的空闲空间(10%到20%或更多)。

  3. 受先前对终身制一代的限制:给年轻一代increase the young generation size as you increase the number of processors, because allocation can be parallelized足够的内存。默认值由NewRatio-Xmx设置计算得出

你能告诉JVM在计算PS幸存者空间大小时考虑什么参数吗?

它必须足够大,在收集伊甸园空间后永远不会真正填满,否则你会得到完整的GC,这是不可取的。

最佳幸存者空间大小取决于您的应用程序。我建议您使用比您想象的更大的伊甸园和幸存者空间在现实负载下测试您的应用程序,看看有多少空间被使用过,并根据您看到的使用情况添加50%到100%。

该机器有256G的物理内存,其中约200G

默认的堆大小是32GB,我建议你使用这个默认值,除非你有充分的理由减少它

-XX: 幸存者比率=1

这通常是一个坏主意,拥有像8这样的高幸存者比例通常会更好。

将值设置为8没有任何效果

很可能你的分配率很低。我通常设置一个很高的Young空间,类似于-Xmn8g甚至-Xmn24g,但这是一个好主意还是坏主意取决于您的应用程序。

相关内容

  • 没有找到相关文章

最新更新