openj9和k8s内存管理问题



我们正在运行一个带有一些Java应用程序的k8s集群。作为容器运行时,我们使用cr-io,作为jvm,我们使用openj9(应该有很好的容器支持)。

最近我们的集群上的工作负载增加了,我们注意到容器不释放未使用的堆内存。

我已经尝试了一些gc选项来实现这一点,但没有成功:

-Xtune:virtualized
-XX:+IdleTuningGcOnIdle -XX:IdleTuningMinIdleWaitTime=30 
-Xgc:concurrentScavenge
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/mnt/repository

我错过了什么?

查看OpenJ9用户文档>内存管理;堆大小>膨胀和收缩

这解释了OpenJ9 JVM通过在-xminf-xmaxf选项确定的范围内保持已分配空间(在GC之后)的空闲空间比率来调整堆的大小。JVM将"急切地"扩展。如果堆得太小,但它是"勉强"的;关于压缩堆。

所以你观察到的行为(堆不收缩)可能只是-xminf-xmaxf默认设置下的正常行为。(你可以通过-XX+PrintFlagsFinal选项了解他们在做什么。)

注意HotSpot jvm有大致相似的机制来调整堆大小,尽管命令行选项不同。

最新更新