限制Docker容器中的JVM内存消耗

我有一个Spring

Boot应用程序,它实现了一个我想在Docker容器中运行的服务。我遵循了Spring官方文档的指南,该指南建议创建类似于以下内容的DockerFile:

FROM frolvlad/alpine-oraclejdk8:slim

VOLUME /tmp

ADD gs-spring-boot-docker-0.1.0.jar app.jar

RUN sh -c 'touch /app.jar'

ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

然后,将映像推送到Docker之后,我将使用Docker

Compose通过以下方式启动它:

  spring-boot-docker:

ports:

- "80:80"

expose:

- "80"

image: my-repo/spring-boot-docker:0.1.0-SNAPSHOT

container_name: spring-boot-docker

environment:

JAVA_OPTS: '-Xmx64m'

在这里,我得到了JAVA_OPTS限制内存分配的变量,但是,当我执行该变量时docker stats spring-boot-

docker,容器占用的内存过多(我知道JVM占用的总内存可能远远超过64M,但在这种情况下是完全无限)。

我也尝试过使用mem_limitparam,但这会明显降低应用程序的速度。

回答:

经过一段时间的努力之后,当该JAVA_OPTS变量基于Tomcat映像时,似乎可以将其传递给容器,但是Spring

Boot使用Java本身作为基础映像。

我发现本教程为我解决了这个问题,只是修改了在DockerFile中启动进程的方式,并直接在ENTRYPOINT中添加了JAVA_OPTS变量:

ENTRYPOINT exec java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar

这样,JVM将从命令本身中选择值。

以上是 限制Docker容器中的JVM内存消耗 的全部内容, 来源链接: utcz.com/qa/429513.html

回到顶部