gpt4 book ai didi

java - 在容器内运行时,Java 8 默认情况下会始终消耗至少 1GB RAM 吗?

转载 作者:行者123 更新时间:2023-12-02 02:15:08 28 4
gpt4 key购买 nike

我们正在 Kubernetes 集群中运行 Java 应用程序。应用程序本身对 RAM 的需求并不高,但我注意到它总是消耗 1GB。

kubectl top pods
NAME CPU(cores) MEMORY(bytes)
my-application-c0ffee 100m 1127Mi
my-application-c0ffee 100m 1109Mi

当我检查jcmd <pid> GC.heap_info时在容器内,我得到以下内容:

def new generation   total 89216K, used 12090K [0x00000000bc200000, 0x00000000c22c0000, 0x00000000d2c00000)
...
tenured generation total 197620K, used 151615K [0x00000000d2c00000, 0x00000000decfd000, 0x0000000100000000)
...
Metaspace used 146466K, capacity 152184K, committed 152576K, reserved 1183744K
class space used 18171K, capacity 19099K, committed 19200K, reserved 1048576K

据我了解,默认情况下,Java 保留 1GB 的虚拟内存大小用于存储类信息(为了使用 32 位引用以压缩方式引用它,应事先保留此内存块)。当在容器外部运行时,这不是什么大问题,因为该内存实际上并未提交。它只是一个保留的地址空间。

但在容器内运行时情况似乎完全不同,其中保留内存变为已提交

这是否意味着在容器中运行的 Java 默认情况下将消耗至少 1GB RAM?除了显式设置 -XX:CompressedClassSpaceSize 之外,还有其他方法可以解决这个问题吗? ?

最佳答案

in case of running inside container, where reserved memory becomes committed

不,保留的内存不会“提交”。无论是否在容器中,虚拟大小和驻留集大小都是不同的度量。物理内存中保存的是 RSS。

kubectl top 不会向您显示 RSS,而是显示所谓的“工作集”,它并不总是与实际内存使用情况匹配。

Does this mean that Java running in a container will by default consume at least 1GB of RAM?

没有。

is there any other way to deal with that

这取决于您的目标。如果您想查看实际的容器内存统计信息,请查看 /sys/fs/cgroup/memory/.../memory.statsmemory.usage_in_bytes。或者,如果您使用 docker,请运行 docker stats。

如果您想减少进程的虚拟内存,请关闭-XX:-UseCompressedClassPointers

关于java - 在容器内运行时,Java 8 默认情况下会始终消耗至少 1GB RAM 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67274321/

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