"initial memory allocation" 与 Openshift/Kubernetes 中的 "limit" 有区别吗?
Is there an "initial memory allocation" different from the "limit" in Openshift/Kubernetes?
在 java 中,您有最小堆 space (-Xms) 和最大堆 space (-Xmx)。最小堆 space 从一开始就分配给 JVM,“最大堆 space” 是 JVM 到达时会说“超出堆 space” 的限制。
Openshift/Kubernetes 中的 pod 是否存在如此不同的值(初始值和限制值),或者由于某种原因初始内存分配始终等于限制值?
在 K8s 中,资源被定义为请求和限制。
该请求是针对初始分配的,当 pod 达到内存限制时,它将得到 OOMKILLED,然后将重新启动,所以我认为它的行为与您描述的相同。
对于现代 Java 版本(支持 +UseContainerSupport
的版本),K8s 或 Openshift Pod 中的堆分配取决于容器可用的内存。
这完全由“containers.resources.limits.memory”值决定(正如您推测的那样)。其他值,例如“containers.resources.requests.memory”不参与其中。如果未设置资源限制,则各个集群节点的整个内存将用于初始堆大小人体工程学,这是 OOM 杀戮的必经之路。
在 java 中,您有最小堆 space (-Xms) 和最大堆 space (-Xmx)。最小堆 space 从一开始就分配给 JVM,“最大堆 space” 是 JVM 到达时会说“超出堆 space” 的限制。
Openshift/Kubernetes 中的 pod 是否存在如此不同的值(初始值和限制值),或者由于某种原因初始内存分配始终等于限制值?
在 K8s 中,资源被定义为请求和限制。 该请求是针对初始分配的,当 pod 达到内存限制时,它将得到 OOMKILLED,然后将重新启动,所以我认为它的行为与您描述的相同。
对于现代 Java 版本(支持 +UseContainerSupport
的版本),K8s 或 Openshift Pod 中的堆分配取决于容器可用的内存。
这完全由“containers.resources.limits.memory”值决定(正如您推测的那样)。其他值,例如“containers.resources.requests.memory”不参与其中。如果未设置资源限制,则各个集群节点的整个内存将用于初始堆大小人体工程学,这是 OOM 杀戮的必经之路。