【发布时间】:2019-01-20 17:30:50
【问题描述】:
我很难理解为什么我的 Java 应用程序会慢慢消耗 pod 可用的所有内存,导致 Kubernetes 将 pod 标记为内存不足。 JVM (OpenJDK 8) 使用以下参数启动:
-XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap -XX:MaxRAMFraction=2
我正在监视 pod 使用的内存以及 JVM 内存,并希望看到一些相关性,例如在主要垃圾收集之后,使用的 pod 内存也会下降。但是我没有看到这一点。我在下面附上了一些图表:
Pod 内存: 总 JVM 内存 JVM 的详细分解(抱歉所有颜色看起来都一样……感谢 Kibana)
我正在努力解决的是为什么在 16:00 之前堆内存显着减少时,Pod 内存不会也下降?
【问题讨论】:
-
一般情况下,JVM 不会将为 Java Heap 保留的内存返回给 OS。但是,它可以根据 GC 算法执行此操作。 G1 释放堆内存,但仅在 Full GC 之后。请参阅this post 了解更多信息。
标签: java kubernetes jvm