相关疑难解决方法(0)

-XX:MaxRAMFraction = 1是否适合在集装箱环境中生产?

Java 8/9为-XX:+UseCGroupMemoryLimitForHeap(with -XX:+UnlockExperimentalVMOptions)带来了支持.这设置-XX:MaxRAM为cgroup内存限制.默认情况下,JVM分配大约25%的最大RAM,因为-XX:MaxRAMFraction默认值为4.

例:

MaxRAM = 1g
MaxRAMFraction = 4
JVM is allowed to allocate: MaxRAM / MaxRAMFraction = 1g / 4 = 256m
Run Code Online (Sandbox Code Playgroud)

仅使用25%的配额似乎是部署的浪费(通常)由单个JVM进程组成.所以现在人们设置了-XX:MaxRAMFraction=1,所以JVM理论上允许使用100%的MaxRAM.

对于1g示例,这通常会导致堆大小约为900米.这似乎有点高 - JVM或其他东西(如远程shell或进程外任务)没有很多空闲空间.

那么这个配置(-XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap -XX:MaxRAMFraction=1)被认为是安全的甚至是最佳实践吗?或者我应该还是伸手接-Xmx,-Xms,-Xss等?

java jvm docker

30
推荐指数
2
解决办法
1万
查看次数

29
推荐指数
3
解决办法
4万
查看次数

做java标志Xms和Xmx覆盖标志XX:+ UseCGroupMemoryLimitForHeap?

我正在Kubernetes中运行一个容器化的java应用程序.

为了根据容器规范制作jvm保留存储器,-XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap必须设置标志.

如果这两个标志都与Xms和Xmx标志一起设置,那么jvm的行为是什么?一面旗帜会覆盖另一面吗?

例如,如果我们java -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap -Xms -Xms2500M -Xmx2500M -jar myjar.jar 在容器中有容量限制4Gi用于请求而4Gi用于响应,则在具有128Gi内存的主机中,JVM会保留多少内存?

java flags containers docker kubernetes

6
推荐指数
1
解决办法
5841
查看次数