【问题标题】:memory management problems with openj9 and k8sopenj9 和 k8s 的内存管理问题
【发布时间】:2021-11-25 15:26:27
【问题描述】:

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

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

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

-Xtune:virtualized

-XX:+IdleTuningGcOnIdle -XX:IdleTuningMinIdleWaitTime=30 

-Xgc:concurrentScavenge

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/mnt/repository

我错过了什么?

【问题讨论】:

  • 除非你告诉使用你尝试过的东西,否则我们不会知道你错过了什么。
  • 好点,刚刚更新了我的帖子

标签: java kubernetes garbage-collection openj9 cri-o


【解决方案1】:

看看OpenJ9 user documentation > Memory management > Heap sizing > Expansion and contraction

这解释了 OpenJ9 JVM 通过将分配的可用空间(在 GC 之后)的比率保持在由 -xminf-xmaxf 选项确定的范围内来调整堆大小。如果堆太小,JVM 会“急切地”扩展,但它“不愿意”收缩堆。

因此,考虑到-xminf-xmaxf 的默认设置,您观察到的行为(堆未缩小)可能只是正常行为。 (您可以使用-XX+PrintFlagsFinal 选项了解他们在做什么。)

请注意,HotSpot JVM 具有大致相似的堆大小调整机制,但命令行选项不同。

【讨论】:

    猜你喜欢
    • 2011-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-23
    相关资源
    最近更新 更多