gpt4 book ai didi

java - OpenJDK 1.8.0_242,MaxRAMFraction 设置未反射(reflect)

转载 作者:太空宇宙 更新时间:2023-11-04 09:06:09 25 4
gpt4 key购买 nike

我正在 alpine-OpenJDK 镜像中运行 Springboot 应用程序,并面临 OutOfMemory 问题。最大堆的上限为 256MB。我尝试将 MaxRAMFraction 设置更新为 1,但没有看到它反射(reflect)在 Java_process 中。我可以选择将容器内存限制增加到 3000m,但更愿意使用 MaxRamfraction=1 的 Cgroup 内存。有什么想法吗?

Java-Version
openjdk version "1.8.0_242"
OpenJDK Runtime Environment (IcedTea 3.15.0) (Alpine 8.242.08-r0)
OpenJDK 64-Bit Server VM (build 25.242-b08, mixed mode)

bash-5.0$ java -XX:+PrintFlagsFinal -version | grep -Ei "maxheapsize|MaxRAMFraction"
uintx DefaultMaxRAMFraction = 4 {product}
uintx MaxHeapSize := 262144000 {product}
uintx MaxRAMFraction = 4 {product}
openjdk version "1.8.0_242"
OpenJDK Runtime Environment (IcedTea 3.15.0) (Alpine 8.242.08-r0)
OpenJDK 64-Bit Server VM (build 25.242-b08, mixed mode)

Container Resource limits
ports:
- containerPort: 8080
name: 8080tcp02
protocol: TCP
resources:
limits:
cpu: 350m
memory: 1000Mi
requests:
cpu: 50m
memory: 1000Mi
securityContext:
capabilities: {}

Container JAVA_OPTS screenshot

最佳答案

Max heap is being capped at 256MB.

你的意思是通过docker中的-m?如果是这样,这不是您指定的 java 堆,而是总内存。

I tried updating the MaxRAMFraction setting to 1

MaxRAMFraction 已弃用且未使用,忘记它吧。

UseCGroupMemoryLimitForHeap

已弃用并将被删除。还可以使用已移植到 java-8 的 UseContainerSupport

MaxRAM=2g

你知道这实际上是做什么的吗?它设置 JVM 认为您拥有的“物理”RAM 的值。

我假设您没有故意在这里设置-Xms-Xmx?因为您不知道容器将有多少内存?如果是这样,我们就处于同样的境地。我们确实知道我们将获得的最小值是1g,但我不知道最大值,因此我不喜欢显式设置-Xms-Xmx

相反,我们这样做:

-XX:InitialRAMPercentage=70
-XX:MaxRAMPercentage=70
-XX:+UseContainerSupport
-XX:InitialHeapSize=0

就是这样。这是做什么的?

InitialRAMPercentage 用于计算初始堆大小,但仅当 InitialHeapSize/Xms 缺失时才使用。 MaxRAMPercentage 用于计算最大堆。不要忘记,java 进程不仅仅需要仅仅 ,它还需要 native 结构;这就是为什么 70 (%)。

关于java - OpenJDK 1.8.0_242,MaxRAMFraction 设置未反射(reflect),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60198036/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com