【发布时间】:2021-02-01 02:27:37
【问题描述】:
在具有大量微服务的Kubernetes 集群中,其中一个专门用于运行Java 1.8 数据处理应用程序的Java Virtual Machine (JVM)。
直到最近,在该 JVM pod 中运行的作业消耗的 RAM 不到 1 GB,因此该 pod 已设置为 4 GB 的最大内存,而 JVM 没有任何明确的堆大小设置。
一些新数据现在需要大约 2.5 GB 用于整个 pod,包括 JVM(如 kubernetes top 命令所报告的,在使用增加的 8 GB 内存限制启动后),但 pod 在启动后不久就崩溃了限制为 4 GB。
使用像-Xms256m -Xmx3072m 这样的头部大小范围并限制为 4 GB 并不能解决问题。事实上,现在 pod 甚至都没有启动。
有没有什么方法可以参数化 JVM 以适应所需的 2.5 GB,而不增加 pod 的 4 GB 最大内存?
【问题讨论】:
-
什么版本的JVM?当前版本知道查找 pod 的资源限制并相应地调整堆大小,而无需任何
-Xmx选项。 -
Java 1.8(在问题中更新)。
-
更具体地说? Java 8u191 特别是capable of figuring it out on its own。
-
这个问题,它目前的措辞是没有意义的。如果一个进程占用 2.5 GB RAM,那么在具有 4 GB 内存限制的容器中运行它就没有问题。当谈到 2.5 GB 时,您是指 Java 堆大小、进程驻留集大小 (RSS) 还是虚拟内存大小 (VSZ)? This answer 可能会让您知道是什么造成了 Java 进程的内存占用。
-
Pod 的总 RAM 消耗达到 2.5 GB(更新了更多细节的问题)。基于此,4 GB 的限制应该已经足够了,但事实并非如此,并且需要通过 kubernetes top 命令将 pod 增加到 8 GB 才能运行并进行内存测量。
标签: java kubernetes memory-management jvm heap-memory