[部署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节点的内存限制?
在我的Dockerfile
中,我定义了:
...
ENTRYPOINT ["node-entrypoint.sh"]
然后在node-entrypoint.sh
中定义:
... export JVM_ARGS="-Xmx1G" ./bin/run-corda
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