如何在 Docker 容器内为 Wildfly 设置堆大小?

Posted

技术标签:

【中文标题】如何在 Docker 容器内为 Wildfly 设置堆大小?【英文标题】:How to set heap size for wildfly inside Docker container? 【发布时间】:2017-05-04 10:54:52 【问题描述】:

我正在尝试增加 docker 容器中 Wildfly 的堆大小。这可以通过在常规 Wildfly 设置中更新 wildfly/bin/standalone.conf 轻松完成。

我们的 wildfly 基础 docker 映像的默认堆大小为 512 MB,在其中一个 Web 应用程序中必须为 1GB。一种方法是使用 sed 命令在 Docker 文件中进行简单的文本替换 -

RUN sed -i -- 's/JAVA_OPTS="-Xms64m -Xmx512m -XX:MaxPermSize=256m/JAVA_OPTS="-Xms2048m -Xmx6144m -XX:MaxPermSize=256m/g' /path/standalone.conf

我想知道是否有另一种(更清洁的)方法来解决这个问题?

【问题讨论】:

【参考方案1】:

我建议你使用 JAVA_TOOL_OPTIONS 而不是 JAVA_OPTS 。因为 JVM 直接理解 JAVA_TOOL_OPTIONS。

【讨论】:

【参考方案2】:

使用docker-compose时设置环境变量如下!

environment:
  - JAVA_OPTS=-server -Xms512m -Xmx2048m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m -XX:+UseAdaptiveSizePolicy -XX:MaxMetaspaceSize=1024m -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true-Djava.net.preferIPv4Stack=true

不要使用"(引号)!

【讨论】:

java.net.preferIPv4Stack 重复两次【参考方案3】:

您可以在用于运行 docker 容器的命令中传递 JAVA_OPTS 环境变量的值:

docker run -it --env JAVA_OPTS="-server -Xms2048m -Xmx6144m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true" jboss/wildfly

或者,您可以通过创建包含以下内容的 Dockerfile 来扩展标准图像:

FROM jboss/wildfly:latest

COPY standalone.conf $JBOSS_HOME/bin/

并将修改后的standalone.conf 放在它旁边的目录中。

然后你就可以构建它了:

docker build -t my/wildfly:latest .

并运行它:

docker run my/wildfly

【讨论】:

以上是关于如何在 Docker 容器内为 Wildfly 设置堆大小?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Dockerfile 在启动 docker 容器上运行 jboss-cli

连接到在 docker 容器中运行的 Kafka 时出错

通过 Eclipse 在 Docker 上调试 Wildfly 应用程序?

为啥 OpenJDK Docker 容器会忽略 Kubernetes 中的内存限制?

Docker时区timezone问题

主机无法访问 Wildfly 容器