当前位置: 首页 > 知识库问答 >
问题:

如何在Docker容器内设置Java堆大小(Xms/Xmx)?

彭胡媚
2023-03-14

在提出这个问题时,Docker看起来很新,以至于在网上没有这个问题的答案。我唯一找到的地方是这篇文章,作者在文章中说这很难,就是这样。

共有3个答案

严开宇
2023-03-14

更新:关于这个讨论,Java增加了关于容器支持的游戏。如今(或者更准确地说是自JVM版本10以来),JVM足够智能,可以判断它是否在容器中运行,如果是,则判断它限制了多少内存。

因此,与其在启动JVM时设置固定的限制,然后必须根据容器限制(K8s世界中的资源限制)的变化进行更改,不如什么都不做,让JVM自己制定限制。

在没有任何额外配置的情况下,JVM将最大堆大小设置为分配内存的25%。由于这是一种节省,您可能希望通过设置属性MaxRAMPercentage将其提高一点。此外,对于初始堆大小,存在-XX:InitialRAMPercentage,对于RAM小于96MB的容器,存在-XX:MinRAMPercentage。

有关该主题的更多信息,这里有一个很好的概述。

韩祯
2023-03-14

我同意这取决于您使用的容器。如果您使用的是官方Tomcat映像,看起来很简单,您需要将JAVA_OPTS环境变量与堆设置一起传递:

docker run --rm -e JAVA_OPTS='-Xmx1g' tomcat

查看如何设置JVM参数?

壤驷阳冰
2023-03-14

注意,在docker compose中。yml文件-您需要去掉双引号:

  environment:
  - JVM_OPTS=-Xmx12g -Xms12g -XX:MaxPermSize=1024m

  environment:
  - CATALINA_OPTS=-Xmx12g -Xms12g -XX:MaxPermSize=1024m
 类似资料:
  • 问题内容: 在提出这个问题时,Docker看起来已经足够新了,无法在网络上找到该问题的答案。我发现的唯一地方是这篇文章,作者说这很困难,仅此而已。 问题答案: 我同意这取决于您使用的容器。如果您使用的是官方的Tomcat映像,看起来很简单,则需要将环境变量与堆设置一起传递: 请参阅如何设置JVM参数?

  • 问题内容: 我有一个具有%宽度和高度的容器,因此它可以根据外部因素进行缩放。我希望容器内的字体相对于容器的大小是恒定的。有没有什么好方法可以使用CSS做到这一点?将根据原来的字体尺寸(这将是100%)将只缩放字体。 问题答案: 您也许可以使用CSS3通过计算来做到这一点,但是使用JavaScript可能更安全。 使用JS,您可以更改文本的高度,然后在调整大小的过程中将相同的计算简单地绑定到调整大小

  • 我有一个Java应用程序,基于Java8 OpenJDK。它运行在一个限制为20GB的docker容器中。 tomcat的-xms和-xmx设置如下: -xms=容器内存的60%(由cgroup指定)-so 12gb-xmx=容器内存的80%(由cgroup指定)-so 16gb 通常情况下是使用MaxRAM还是-xmx,还是两者都设置有什么好处? 如果我使用MaxRAM而不是-xmx,java将

  • 我收到了有关。 故事是我有一个名为,我通过重写方法自己重新绘制它。绘图的内容是动态生成的。所以直到运行时我才知道它的大小。问题是我如何/在哪里可以动态设置其超级视图(滚动视图)的内容大小?对此有什么想法吗?

  • 我们有一个需求,即应用程序jvm总内存太高,并且根据输入数据集而变化。因此我们不知道要使用-xmx命令行选项设置的最大堆大小。所需的总内存大于默认的最大堆大小(总物理内存的1/4)。 当我们没有给出任何GC人体工程学命令行参数时,内存在9-9.5GB(系统中的总物理内存为38GB)之后没有增长。而应用程序就会在这一点上卡住。 如果我们将Xmx值设为20 GB,则应用程序正在运行。但是我们不确定最大

  • 我有一个容器有%的宽度和高度,所以它根据外部因素进行缩放。我希望容器内的字体是一个恒定的大小相对于容器的大小。使用CSS有什么好的方法可以做到这一点吗?将只根据原始字体大小(100%)缩放字体。