1. 程式人生 > 其它 >Java 應用在 Kubernetes 中的記憶體配置

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)