我正在 Kubernetes 中运行一个容器化的 Java 应用程序。
为了让jvm根据容器规范预留内存,-XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap
标志必须设置。
如果这两个标志都与 Xms 和 Xmx 标志一起设置,jvm 的行为会是什么?一个标志会覆盖另一个吗?
例如,如果我们有 java -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap -Xms -Xms2500M -Xmx2500M -jar myjar.jar
在容器限制 4Gi 的请求和 4Gi 的响应的 Pod 中,在具有 128Gi 内存的主机中,JVM 会保留多少内存?
最佳答案
-Xmx 标志覆盖 -XX:+UseCGroupMemoryLimitForHeap 标志。
标志 -XX:+UseCGroupMemoryLimitForHeap 让 JVM 检测容器中的最大堆大小应该是多少。
-Xmx 标志将最大堆大小设置为固定大小。
为了回答您的示例,JVM 将保留 2500M 堆空间。非堆和 jvm 的东西会有一些额外的内存使用。
要进一步调整容器中的内存使用情况,您可以使用 -XX:MaxRAMFraction 标志。 见这篇文章:https://blog.csanchez.org/2017/05/31/running-a-jvm-in-a-container-without-getting-killed/
关于java - java 标志 Xms 和 Xmx 是否覆盖标志 XX :+UseCGroupMemoryLimitForHeap?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52555036/