[英]memory management problems with openj9 and k8s
我们正在运行一个带有一些 java 应用程序的 k8s 集群。 作为容器运行时,我们使用 cr-io 作为 jvm 采用 openjdk-16 openj9(应该有良好的容器支持)。
最近我们集群的工作负载增加了,我们注意到容器没有释放未使用的堆 memory。
我已经尝试了一些 gc 选项来实现这一点,但没有成功:
-Xtune:virtualized
-XX:+IdleTuningGcOnIdle -XX:IdleTuningMinIdleWaitTime=30
-Xgc:concurrentScavenge
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/mnt/repository
我错过了什么?
查看OpenJ9 用户文档 > Memory 管理 > 堆大小调整 > 扩展和收缩
这解释了 OpenJ9 JVM 通过将分配的可用空间(在 GC 之后)的比率保持在由-xminf
和-xmaxf
选项确定的范围内来调整堆大小。 JVM如果堆太小会“急切”地扩容,但对于收缩堆就“勉强”。
因此,鉴于-xminf
和-xmaxf
的默认设置,您观察到的行为(堆没有缩小)可能只是正常行为。 (您可以使用-XX+PrintFlagsFinal
选项找出他们在做什么。)
请注意,HotSpot JVM 具有大致相似的调整堆大小的机制,尽管命令行选项不同。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.