Java 应用在 Kubernetes 中的内存配置

在基于物理的服务器(此处主要与容器平台进行区分,故此描述)上运行 Java 应用程序时,我们通常会使用 Java 虚拟机参数 "-Xms、-Xmx" 来指定 Java 堆内存的初始值和最大值。如果要将我们的应用程序移植到容器平台,如何在容器环境中配置 Java 堆内存大小呢?有没有最佳做法?

  • MaxRAMPercentage
  • InitialRAMPercentage
  • MinRAMPercentage

这三个参数是 JDK8U191 为适配 Docker 容器新增的几个参数,类比 Xmx、Xms

注:-XX:InitialRAMFraction、-XX:MaxRAMFraction、-XX:MinRAMFraction 已经被标记为 deprecated。

Docker 容器模式下,我们可以给每个 JVM 实例所属的 POD 分配任意大小的内存上限。比如:给每个账户服务分配 4G,给每个支付服务分配 8G。如此一来,启动脚本就不好写成通用的了,指定 3G 也不是,指定 6G 也不是。但是,有了这三个新增参数,我们就可以在通用的启动脚本中指定 75%(-XX:MaxRAMPercentage=75 -XX:InitialRAMPercentage=75 -XX:MinRAMPercentage=75)

posted @ 2022-05-29 13:16  Steven.Chow  阅读(538)  评论(0编辑  收藏  举报