Docker环境下Java应用的最大内存和堆内存的设置

1、 设置应用允许使用的最大内存

通过docker run(创建一个新的容器并运行)命令中设置-m来进行设置。案例如下所示。

docker run -d --name test-service -m 800m --env LOG_LEVEL=ERROR -e "spring.profiles.active=dev" -p 8090:8090 test-service

2、设置最大堆内存

在Dockerfile里面,设置”-Xmx”参数。-Xmx用于指定堆(Heap)的最大值。案例如下所示。

CMD ["java", "-Xmx600m", "-jar", "/usr/local/test/data/test-1.0-SNAPSHOT.jar"]

将这个参数添加到我们的$ java -jar命令将会限制Java堆栈大小为600MB。 运行时将尝试通过运行垃圾回收来保持它低于这个数字。

注意:

docker镜像服务的内存不能全部给“-Xmx”,因为JVM消耗的内存不仅仅是Heap。
JVM = Heap + Method Area +Constant Pool + Thread Stack * num of thread 。

Xmx的值可设置为镜像上限减去150m或200m。当然还需要考虑应用自身的特点,比如class数目,并发线程数等。

参数设置的特别说明

docker镜像的内存上限,不能全部给“-Xmx”。因为JVM消耗的内存不仅仅是Heap,如下图:
在这里插入图片描述

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐