Docker-Java容器不遵守内存限制

问题描述 投票:0回答:2

我已经阅读了很多有关限制容器的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

我已删除并忘记的其他标志之中

java docker memory docker-compose jvm
2个回答
1
投票

tomcat的catalina.sh脚本的Java选项所依赖的环境变量是:JAVA_OPTS。如果将撰写文件更改为使用以下env变量,则它应该可以工作。

environment: - JAVA_OPTS=-Xmx128m -Xms128m

除了事实是,对于运行tomcat的JVM,25m的内存似乎少得多。


0
投票

要限制Docker容器的内存,您需要在docker-compose.yml文件中添加以下内容

environment:
  - <name>=<value>
deploy:
  resources:
    memory: 256M

一旦添加了上面的代码,容器将被限制为给定的内存限制,并且您可以在docker stats输出中看到结果。有关资源限制的更多详细信息,请参阅this docker文档。

Note:如果容器超出给定的内存限制,则内核将终止该容器。

© www.soinside.com 2019 - 2024. All rights reserved.