java项目容器化(docker)部署注意点

cgroup 支持

从 jdk 8u121 开始支持,即低于这个版本无法使用容器特性

https://bugs.java.com/bugdatabase/view_bug.do?bug_id=8170888

https://bugs.openjdk.org/browse/JDK-8170888

https://bugs.java.com/bugdatabase/view_bug.do?bug_id=8175898

https://bugs.openjdk.org/browse/JDK-8140793

从 jdk 8u131 开始支持 docker 的内存和cpu限制

https://blogs.oracle.com/java/post/java-se-support-for-docker-cpu-and-memory-limits

启用方式

-XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap

支持内存自适应

在 jdk 8u191 中加入 UseContainerSupport 和 ActiveProcessorCount 参数,因为 jdk 8 使用最广泛

https://www.oracle.com/java/technologies/javase/8u191-relnotes.html

https://jvm-argument-for-docker.teaho.net/

其中,-XX:InitialRAMFraction、-XX:MaxRAMFraction、-XX:MinRAMFraction 标记为过期,对应的替换参数将 Fraction 替换为 Percentage,即 -XX:InitialRAMPercentage、 -XX:MaxRAMPercentage、-XX:MinRAMPercentage。

替换前 InitialRAMFraction MaxRAMFraction MinRAMFraction
替换后 InitialRAMPercentage MaxRAMPercentage MinRAMPercentage

需要手动添加 -XX:+UseContainerSupport,来进行内存自适应。

https://bugs.java.com/bugdatabase/view_bug.do?bug_id=8146115

https://bugs.openjdk.org/browse/JDK-8146115

指定使用 cpu 数量

-XX:ActiveProcessorCount=xx

从 jdk 10 开始默认支持容器化部署

java

java项目容器化(docker)部署注意点_第1张图片

总结

jdk 版本 < 8u121,不要在容器化环境中使用

8u131 <= jdk 版本 < 8u191,添加参数 -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap 支持内存自适应。

8u191 <= jdk 版本 < jdk 10,添加了参数 -XX:+UseContainerSupport 支持内存自适应,-XX:ActiveProcessorCount 支持调整 cpu 数量。

jdk 10 <= jdk 版本,-XX:+UseContainerSupport 默认启用。

UseContainerSupport 参数只在 linux x64 系统上使用。

按照文章的讲解

https://zhuanlan.zhihu.com/p/602433997

上面的情况都是在 cgroup v1的情况下,如果在 cgroup v2下就会有问题了。

https://bugs.openjdk.org/browse/JDK-8230305

从 jdk 11.0.6 和 jdk 8u372 开始支持 cgroup v2。

参考链接

https://blog.csdn.net/lyy12332133/article/details/131311033

https://www.cnblogs.com/xiaoqi/p/container-jvm.html

https://blog.csdn.net/lyy12332133/article/details/131311033

https://zhuanlan.zhihu.com/p/602433997

https://www.jianshu.com/p/040a1315bce5

https://blog.csdn.net/qq_26824159/article/details/130112077

你可能感兴趣的:(容器,java,jvm,java,开发语言,容器,docker)