Docker版本:
# docker -v
Docker version 24.0.7, build afdd53b
kubernetes的版本:
# kubectl version
Client Version: version.Info{Major:"1", Minor:"25", GitVersion:"v1.25.14", GitCommit:"a5967a3c4d0f33469b7e7798c9ee548f71455222", GitTreeState:"clean", BuildDate:"2023-09-13T09:12:09Z", GoVersion:"go1.20.8", Compiler:"gc", Platform:"linux/amd64"}
Kustomize Version: v4.5.7
jvm配置:
# java -XX:+UseContainerSupport -XX:+PrintCommandLineFlags -version
我容器限制的是Limit 1G,返回的是物理机15G的,不是限制后的:
-XX:InitialHeapSize=261956608 -XX:MaxHeapSize=4191305728 -XX:+PrintCommandLineFlags -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseContainerSupport -XX:+UseParallelGC
java version "1.8.0_291"
Java(TM) SE Runtime Environment (build 1.8.0_291-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.291-b10, mixed mode)
# java -XX:+UseContainerSupport -XshowSettings:vm -version
VM settings:
Max. Heap Size (Estimated): 3.47G
Ergonomics Machine Class: server
Using VM: Java HotSpot(TM) 64-Bit Server VM
java version "1.8.0_291"
Java(TM) SE Runtime Environment (build 1.8.0_291-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.291-b10, mixed mode)
我原来是好的,在新环境不行了,区别是docker和kubernetes都装的最新的。
升级jdk到8u381+,支持新的cgroup v2,就好了。
原因:
cgroup v2 在 Docker engine 20.10 中启用了。这意味着 docker 不再使用 cgroups v1,而是转而使用 cgroups v2。
旧的 Java 版本使用 cgroup v1,这意味着当使用旧的 Java 版本时,仍然使用 cgroup v1,JVM 的内存计算不正确,会导致 Out Of Memory。
非常感谢,升级了JDK版本就好啦!
你的答案