文章目录
🚀 目标:了解 Docker 容器环境下,JVM 内存配置的最佳实践
背景
在传统 Java 应用的内存参数使用 -Xmx、-Xms 等参数设定,JVM 默认会使用 1/4 的内存作为堆内存。
在容器化下的 Java 应用的内存参数应该根据 cgroups 配置来决定。不同的 JDK 版本对 Docker 的感知能力不同,对 cgroups 配置读取的支持能力也不同。
解决
堆内存配置
根据不同的 JDK 版本,有不同的 JVM 内存配置方案。
jdk 版本 < 8u131
使用 **-Xmx**
、**-Xms**
** 等命令行参数设定内存。适合任意的 JDK 版本,但不能动态感知 cgroups 限制。**
注意:这些参数优先级很高!
示例:-Xms64m -Xmx128m
jdk 版本 8u131~191
使用 **-XX:+UnlockExperimentalVMOptions**
**-XX:+UseCGroupMemoryLimitForHeap**