| openjdk9-openj9 (正确的识别容器限制,3G)安全 [root@xiaoke-test ~]# docker run -m 4GB --rm adoptopenjdk/openjdk9-openj9:alpine-slim java -XshowSettings:vm -version VM settings:  Max. Heap Size (Estimated): 3.00G  Using VM: Eclipse OpenJ9 VM openjdk version "9.0.4-adoptopenjdk" OpenJDK Runtime Environment (build 9.0.4-adoptopenjdk+12) Eclipse OpenJ9 VM (build openj9-0.9.0, JRE 9 Linux amd64-64-Bit Compressed References 20180814_248 (JIT enabled, AOT enabled) OpenJ9 - 24e53631 OMR - fad6bf6e JCL - feec4d2ae based on jdk-9.0.4+12) 
 openjdk10-openj9 (正确的识别容器限制,3G)安全 [root@xiaoke-test ~]# docker run -m 4GB --rm adoptopenjdk/openjdk10-openj9:alpine-slim java -XshowSettings:vm -version VM settings:  Max. Heap Size (Estimated): 3.00G  Using VM: Eclipse OpenJ9 VM openjdk version "10.0.2-adoptopenjdk" 2018-07-17 OpenJDK Runtime Environment (build 10.0.2-adoptopenjdk+13) Eclipse OpenJ9 VM (build openj9-0.9.0, JRE 10 Linux amd64-64-Bit Compressed References 20180813_102 (JIT enabled, AOT enabled) OpenJ9 - 24e53631 OMR - fad6bf6e JCL - 7db90eda56 based on jdk-10.0.2+13) 
 openjdk11-openj9(正确的识别容器限制,3G)安全 [root@xiaoke-test ~]# docker run -m 4GB --rm adoptopenjdk/openjdk11-openj9:alpine-slim java -XshowSettings:vm -version VM settings:  Max. Heap Size (Estimated): 3.00G  Using VM: Eclipse OpenJ9 VM openjdk version "11.0.1" 2018-10-16 OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.1+13) Eclipse OpenJ9 VM AdoptOpenJDK (build openj9-0.11.0, JRE 11 Linux amd64-64-Bit Compressed References 20181020_70 (JIT enabled, AOT enabled) OpenJ9 - 090ff9dc OMR - ea548a66 JCL - f62696f378 based on jdk-11.0.1+13) 
 分析 分析之前我们先了解这么一个情况: JavaMemory (MaxRAM) = 元数据+线程+代码缓存+OffHeap+Heap... 一般我们都只配置Heap即使用-Xmx来指定JVM可使用的最大堆。而JVM默认会使用它获取到的最大内存的1/4作为堆的原因也是如此。 安全性(即不会超过容器限制被容器kill) OpenJdk OpenJdk8-12,都能保证这个安全性的特点(8和9需要特殊参数,-XX:+UnlockExperimentalVMOptions  -XX:+UseCGroupMemoryLimitForHeap)。 OpenJ9 2.IbmOpenJ9所有的版本都能识别到容器限制。 资源利用率 OpenJdk 自动识别到容器限制后,OpenJdk把最大堆设置为了大概容器内存的1/4,对内存的浪费不可谓不大。 当然可以配合另一个JVM参数来配置最大堆。-XX:MaxRAMFraction=int。下面是我整理的一个常见内存设置的表格,  从中我们可以看到似乎JVM默认的最大堆的取值为MaxRAMFraction=4,随着内存的增加,堆的闲置空间越来越大,在16G容器内存时,java堆只有不到4G。 MaxRAMFraction取值 堆占比 容器内存=1G 容器内存=2G 容器内存=4G 容器内存=8G 容器内存=16G 1 ≈90% 910.50M 1.78G 3.56G 7.11G 14.22G 2 ≈50% 455.50M 910.50M 1.78G 3.56G 7.11G 3 ≈33% 304.00M 608.00M 1.19G 2.37G 4.74G 4 ≈25% 228.00M 455.50M 910.50M 1.78G 3.56G 
 OpenJ9 (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |