在切换基本jdk映像和升级k8s之后,我们突然遇到了一个问题,特别是我们想要使用eclipse-temurin:8u312-b07-jdk。下面是一个非常简单的示例:
kubectl run jdk --image eclipse-temurin:8u312-b07-jdk --limits "memory=2Gi"
kubectl exec jdk -it -- /bin/bash
nano Dummy.java内容:
import java.util.concurrent.locks.LockSupport;
import java.util.concurrent.TimeUnit;
public class Dummy {
public static void main(String[] args) throws Exception {
while(true) {
LockSupport.parkNanos(TimeUnit.SECONDS.toNanos(1));
}
}
}编译并运行它:
javac Dummy.java
java -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap Dummy我们收到警告:
OpenJDK 64-Bit Server VM warning: Unable to open cgroup memory limit file /sys/fs/cgroup/memory/memory.limit_in_bytes (No such file or directory)好吧,是的。没有这样的文件,但是有cat /sys/fs/cgroup/memory.max (cgroup v2)。
这是否意味着UseCGroupMemoryLimitForHeap不会产生任何影响?看上去肯定很像。我知道它在11中被废弃和删除--这不是重点。
谢谢。
我做了找出这个问题,看起来我能做到:
java -XX:+UnlockExperimentalVMOptions -XX:MaxRAM=$(cat /sys/fs/cgroup/memory.max) Dummy但这是我不喜欢的。
发布于 2022-02-16 17:46:54
当然,有些东西我不喜欢,但是对于有cgroup v2的图片,我似乎会从以下几个方面开始:
-XX:MaxRAM=$(cat /sys/fs/cgroup/memory.max)这样,跑:
java -XX:MaxRAMPercentage=50.0
-XX:InitialRAMPercentage=50.0
// we don't use this one, but just to look at he resident memory
-XX:+AlwaysPreTouch
-XX:MaxRAM=$(cat /sys/fs/cgroup/memory.max)
Dummy将top -o %MEM显示为1GB。不太理想,但很有效。
https://stackoverflow.com/questions/71145589
复制相似问题