如果 java 堆大小超过 -XX:MaxRAMPercentage 允许的范围,Kubernetes 可能会重新启动 java 容器

问题描述 投票:0回答:1

如果我理解正确的话

-XX:MaxRAMPercentage
设置 JVM 的最大 Java 堆大小。 如果我在 Kubernetes 中运行 JVM 容器并具有以下配置的
-XX:MaxRAMPercentage=60.0

resources: 
  limits: 
     memory: 1024Mi 
  requests: 
     memory: 256Mi

那么最大 Java 堆大小 =

1024Mi*60% = 614Mi

但是如果 JVM 内存不知何故超过 614Mi 会发生什么? Kubernetes 可以强制重启这样的容器吗?

java kubernetes jvm openshift
1个回答
0
投票

这应该与直接设置堆大小(如

-Xmx614M
)相同。如果 JVM 耗尽 Java 堆内存,Kubernetes 无法直接看到这一点。

JVM 将抛出一个

OutOfMemoryError
,但是(因为它无法分配内存或创建对象)这很难恢复。这应该会导致 JVM 本身退出。但此时容器中的主进程已经退出,并且这个is对于Kubernetes是可见的;容器将像任何其他退出的容器一样重新启动(使用相同的内存设置)。

© www.soinside.com 2019 - 2024. All rights reserved.