【发布时间】:2020-02-03 03:41:12
【问题描述】:
我已经阅读了多篇关于限制容器的 JVM 内存的帖子,到目前为止没有任何效果,我不知道我在哪里搞砸了。
我在 Spring Boot 中做了一个简单的“Hello World”,使用 REST 控制器,它没有别的。
这样的应用程序被导出为 WAR 文件,使用 Tomcat JDK 11 映像运行它,我也可以使用带有 FatJar 的 JDK 映像运行它,但问题仍然存在。
预期
让我的 Java 容器占用的内存不超过 25 MB(为了一个数字,可能更多)
实际
这样一个简单的应用程序在docker stats 中占用 200 - 250 MB 内存
Dockerfile
FROM tomcat:9.0.30-jdk11-corretto
COPY tomcat.war /usr/local/tomcat/webapps/ROOT.war
CMD ["catalina.sh","run"]
docker-compose.yml
version: '3.7'
services:
hello:
build:
context: .
dockerfile: Dockerfile
image: app-test
environment:
- JVM_OPTS=-Xms13m -Xmx25m
ports:
- 8080:8080
我试过了
-Xms13m -Xmx25m
-XX:PermSize=13m -XX:MaxPermSize=25m
在我已经删除并忘记的其他标志中
【问题讨论】:
-
-Xms13m -Xmx25m仅适用于 JVM 内存,不适用于容器。 -
@KarthikeyanVaithilingam 哦,这是否意味着我的标志正在工作,但我还必须以另一种方式限制容器?
-
我真的怀疑标准 JVM 会以如此有限的内存开始(除非您使用的是一些微型版本)。
-
@ElliottFrisch 这只是一个例子,对于一个简单的 Hello World 来说,250MB 不是太多了吗?我无法想象以这种方式设置多个微服务
-
看看GraalVM(因此我的非标准评论)。
标签: java docker memory docker-compose jvm