我已经阅读了很多有关限制容器的JVM内存的文章,到目前为止没有任何工作,我不知道我在哪里搞砸。
[我使用REST控制器在Spring Boot中制作了一个简单的“ Hello World”,没有别的。
此类应用程序已导出为WAR文件,并与Tomcat JDK 11映像一起运行,我也可以使用带有FatJar的JDK映像来运行它,但问题仍然存在。
期望
让我的Java容器占用不超过25 MB的内存(为方便起见,数量可能更多)
Actual
这样一个简单的应用程序在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
我已删除并忘记的其他标志之中
tomcat的catalina.sh脚本的Java选项所依赖的环境变量是:JAVA_OPTS。如果将撰写文件更改为使用以下env变量,则它应该可以工作。
environment:
- JAVA_OPTS=-Xmx128m -Xms128m
除了事实是,对于运行tomcat的JVM,25m的内存似乎少得多。
要限制Docker容器的内存,您需要在docker-compose.yml文件中添加以下内容
environment:
- <name>=<value>
deploy:
resources:
memory: 256M
一旦添加了上面的代码,容器将被限制为给定的内存限制,并且您可以在docker stats
输出中看到结果。有关资源限制的更多详细信息,请参阅this docker文档。
Note:如果容器超出给定的内存限制,则内核将终止该容器。