-XX:MaxRAMFraction=1 在容器环境中生产是否安全?
Java 8/9 带来了对 (with ) 的支持。这将设置为 cgroup 内存限制。默认情况下,JVM 分配大约 25% 的最大 RAM,因为默认为 4。-XX:+UseCGroupMemoryLimitForHeap
-XX:+UnlockExperimentalVMOptions
-XX:MaxRAM
-XX:MaxRAMFraction
例:
MaxRAM = 1g
MaxRAMFraction = 4
JVM is allowed to allocate: MaxRAM / MaxRAMFraction = 1g / 4 = 256m
对于(通常)由单个 JVM 进程组成的部署来说,仅使用 25% 的配额似乎是浪费。所以现在人们设置了,所以JVM理论上允许使用100%的MaxRAM。-XX:MaxRAMFraction=1
对于 1g 示例,这通常会导致堆大小约为 900m。这似乎有点高 - 没有很多空闲空间用于JVM或其他东西,如远程shell或进程外任务。
那么,此配置()是否被视为对生产甚至最佳实践是安全的?还是我应该还是手动选择 、等?-XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap -XX:MaxRAMFraction=1
-Xmx
-Xms
-Xss