1.当容器中jvm的内存大于容器限定内存时,容器将会被杀死,jdk8191后提供两个参数用于限制容器中jvm的大小:
-XX:+UseContainerSupport 默认是开启的
-XX:MaxRAMPercentage=80.0 默认百分之25
所以在启动容器时只需指定-XX:MaxRAMPercentage=80.0即课,必须double型
2.测试:
docker run -m 200m --rm openjdk:8-jre-alpine java -XshowSettings:vm -version
经测试,若容器限制在250m之前,该百分比无效,系统会自动分配,百分之五十,具体分配算法未细致研究
当关闭容器感知时,以系统内存进行分配,此时百分比依然有效
docker run -m 1000m --rm openjdk:8-jre-alpine java -XX:-UseContainerSupport -XX:MaxRAMPercentage=20.0 -XshowSettings:vm -version
当显示指定jvm堆大小时,百分比失效,以显示指定为主,此种方式如果容器和jvm堆内存设置不对会导致容器启动失败,推荐百分比设置方式
docker run -m 500m --rm openjdk:8-jre-alpine java -XX:MaxRAMPercentage=80.0 -Xmx450m -XshowSettings:vm -version