如果我理解正确的话
-XX:MaxRAMPercentage
设置 JVM 的最大 Java 堆大小。
如果我在 Kubernetes 中运行 JVM 容器并具有以下配置的-XX:MaxRAMPercentage=60.0
:
resources:
limits:
memory: 1024Mi
requests:
memory: 256Mi
那么最大 Java 堆大小 =
1024Mi*60% = 614Mi
。
但是如果 JVM 内存不知何故超过 614Mi 会发生什么? Kubernetes 可以强制重启这样的容器吗?
这应该与直接设置堆大小(如
-Xmx614M
)相同。如果 JVM 耗尽 Java 堆内存,Kubernetes 无法直接看到这一点。
JVM 将抛出一个
OutOfMemoryError
,但是(因为它无法分配内存或创建对象)这很难恢复。这应该会导致 JVM 本身退出。但此时容器中的主进程已经退出,并且这个is对于Kubernetes是可见的;容器将像任何其他退出的容器一样重新启动(使用相同的内存设置)。