在提出这个问题时,Docker看起来足够新,在网上没有这个问题的答案。我发现的唯一地方是this article,作者说它很难,就是这样。
vojdkbi01#
请注意,在docker-compose.yml文件中,您需要省略双引号:
docker-compose.yml
environment: - JVM_OPTS=-Xmx12g -Xms12g -XX:MaxPermSize=1024m
或
environment: - CATALINA_OPTS=-Xmx12g -Xms12g -XX:MaxPermSize=1024m
bnl4lu3b2#
我同意这取决于你使用的是什么容器。如果你使用的是官方的Tomcat image,看起来很简单,你需要传递JAVA_OPTS环境变量和堆设置:
JAVA_OPTS
docker run --rm -e JAVA_OPTS='-Xmx1g' tomcat
参见How to set JVM parameters?
56lgkhnf3#
**更新:**关于这个讨论,Java在容器支持方面已经有了很大的进步。现在(或者更准确地说,从JVM版本10开始),JVM已经足够聪明,可以判断它是否在容器中运行,如果是,它的内存限制是多少。
因此,与其在启动JVM时设置固定的限制,然后您必须根据容器限制(K8s世界中的资源限制)的变化进行更改,不如简单地什么都不做,让JVM为自己制定限制。在没有任何额外配置的情况下,JVM会将最大堆大小设置为已分配内存的25%。由于这是节约的,您可能希望通过设置-XX:MaxRAMPercentage属性来增加一点。此外,初始堆大小为-XX:InitialRAMPercentage,内存小于96MB的容器为-XX:MinRAMPercentage。
-XX:MaxRAMPercentage
-XX:InitialRAMPercentage
-XX:MinRAMPercentage
有关该主题的更多信息,这里有一个很好的概述。
hl0ma9xz4#
你也可以把这些设置放在你的镜像中,这样你的Dockerfile中就会有如下内容:
ENV JAVA_OPTS="-XX:PermSize=1024m -XX:MaxPermSize=512m"
j0pj023g5#
你可以通过在docker compose文件中指定java选项环境来实现
env: - name: _JAVA_OPTIONS value: "-Xmx1g"
它将改变堆大小。
xurqigkl6#
这完全取决于Java应用程序是如何打包的,以及它的配置文件是如何使用Docker公开的。例如,official tomcat image声明配置文件在默认位置可用:/usr/本地/Tomcat/配置文件/所以很容易覆盖整个目录或只是一个配置文件:
docker run -it --rm -p 8080:8080 -v $PWD/catalina.properties:/usr/local/tomcat/conf/catalina.properties tomcat:8.0
2ul0zpep7#
您也可以通过以下方式在dockerfile中设置Xms和Xmx的值:
Xms
Xmx
ENTRYPOINT ["java", "-Xms128M ", "-Xmx256M", "-jar", "your-precious-service-1.0.0.jar"]
您也可以 * 忽略 * Xms值,只设置Xmx值。
ENTRYPOINT ["java", "-Xmx256M", "-jar", "your-precious-service-1.0.0.jar"]
欲了解更多信息,请阅读:https://akobor.me/posts/heap-size-and-resource-limits-in-kubernetes-for-jvm-applications
7条答案
按热度按时间vojdkbi01#
请注意,在
docker-compose.yml
文件中,您需要省略双引号:或
bnl4lu3b2#
我同意这取决于你使用的是什么容器。如果你使用的是官方的Tomcat image,看起来很简单,你需要传递
JAVA_OPTS
环境变量和堆设置:参见How to set JVM parameters?
56lgkhnf3#
**更新:**关于这个讨论,Java在容器支持方面已经有了很大的进步。现在(或者更准确地说,从JVM版本10开始),JVM已经足够聪明,可以判断它是否在容器中运行,如果是,它的内存限制是多少。
因此,与其在启动JVM时设置固定的限制,然后您必须根据容器限制(K8s世界中的资源限制)的变化进行更改,不如简单地什么都不做,让JVM为自己制定限制。
在没有任何额外配置的情况下,JVM会将最大堆大小设置为已分配内存的25%。由于这是节约的,您可能希望通过设置
-XX:MaxRAMPercentage
属性来增加一点。此外,初始堆大小为-XX:InitialRAMPercentage
,内存小于96MB的容器为-XX:MinRAMPercentage
。有关该主题的更多信息,这里有一个很好的概述。
hl0ma9xz4#
你也可以把这些设置放在你的镜像中,这样你的Dockerfile中就会有如下内容:
j0pj023g5#
你可以通过在docker compose文件中指定java选项环境来实现
它将改变堆大小。
xurqigkl6#
这完全取决于Java应用程序是如何打包的,以及它的配置文件是如何使用Docker公开的。
例如,official tomcat image声明配置文件在默认位置可用:/usr/本地/Tomcat/配置文件/
所以很容易覆盖整个目录或只是一个配置文件:
2ul0zpep7#
您也可以通过以下方式在dockerfile中设置
Xms
和Xmx
的值:您也可以 * 忽略 *
Xms
值,只设置Xmx
值。欲了解更多信息,请阅读:https://akobor.me/posts/heap-size-and-resource-limits-in-kubernetes-for-jvm-applications