【问题标题】:How to increase a Corda node's memory limit within a Docker container如何在 Docker 容器中增加 Corda 节点的内存限制
【发布时间】:2020-09-06 20:30:17
【问题描述】:

部署 Corda 节点时,JVM XmX 参数用于增加节点的内存限制,但通过容器部署时,官方 Corda 映像会引发警告

警告:不建议在 docker 容器中使用 -Xmx 标志。使用传递给容器的 --memory 选项来限制堆大小

https://github.com/corda/corda/blob/release/os/4.4/docker/src/bash/run-corda.sh#L4

为容器设置内存限制是不够的,因为节点本身在容器内崩溃并出现 OOM 异常。

使用开源时,您可以通过如下设置节点配置来绕过XmX参数:

custom = {
   jvmArgs: [ "-Xmx1G", "-XX:+UseG1GC" ]
}

有没有办法通过 dockerfile 或 docker compose 而不是配置来设置 Corda 节点内存限制?

【问题讨论】:

  • 您是如何设法使用此自定义选项的?我尝试在 build.grade 中使用 Cordform,但它不起作用。
  • 这被放置在为节点生成并放置在容器内的node.conf 中。我没有使用 Cordform 进行 docker 部署。您可以尝试直接使用 docker compose。

标签: docker corda


【解决方案1】:

您可以使用 docker-compose 将 JVM_ARGS 作为环境变量传递给容器。

 partya:
    image: corda/corda-zulu-java1.8-4.4
    container_name: partya
    ports:
      - "10006:10201"
    environment:   
      - JVM_ARGS=-Xmx6g -Xms2g -XX:+UseG1GC
    volumes:
      - ./Network/PartyA/node.conf:/etc/corda/node.conf
      - ./Network/PartyA/certificates:/opt/corda/certificates
      - ./Network/PartyA/persistence:/opt/corda/persistence
      - ./Network/PartyA/logs:/opt/corda/logs
      - ./Network/Shared/cordapps:/opt/corda/cordapps
      - ./Network/Shared/node-infos:/opt/corda/additional-node-infos
      - ./Network/Shared/network-parameters:/opt/corda/network-parameters

但这不会帮助您摆脱警告,因为脚本仍将用于运行节点。

如果您真的想摆脱警告,可以使用command 覆盖默认运行脚本。

partya:
    image: corda/corda-zulu-java1.8-4.4
    container_name: partya
    ports:
      - "10006:10201"
    command: java -Dcapsule.jvm.args=-Xmx6g -Xms2g -XX:+UseG1GC -jar /opt/corda/bin/corda.jar --base-directory /opt/corda --config-file /etc/corda/node.conf
    volumes:
      - ./Network/PartyA/node.conf:/etc/corda/node.conf
      - ./Network/PartyA/certificates:/opt/corda/certificates
      - ./Network/PartyA/persistence:/opt/corda/persistence
      - ./Network/PartyA/logs:/opt/corda/logs
      - ./Network/Shared/cordapps:/opt/corda/cordapps
      - ./Network/Shared/node-infos:/opt/corda/additional-node-infos
      - ./Network/Shared/network-parameters:/opt/corda/network-parameters

【讨论】:

  • 听起来可以安全地忽略该警告?我曾假设看到 XmX 参数会导致问题,但如果将 JVM_ARGS 设置为环境是安全的,那么我会这样做。
  • 我认为可以使用 -Xmx 选项根据容器限制设置最大堆大小。我在这里找到了一个很好的解释:developers.redhat.com/blog/2017/03/14/java-inside-docker
猜你喜欢
  • 2015-07-26
  • 2021-12-20
  • 1970-01-01
  • 2017-09-13
  • 2020-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-08
相关资源
最近更新 更多