diff --git a/docker-dev/docker-compose.yml b/docker-dev/docker-compose.yml index 1172940a..cbff7274 100644 --- a/docker-dev/docker-compose.yml +++ b/docker-dev/docker-compose.yml @@ -123,14 +123,16 @@ services: image: otopcua-host:dev # Per-node memory bounds. The full single-mesh stack (6 host nodes) OOM-killed # central-1 on a loaded host. Each host node measured ~357 MiB idle-solo and - # climbs under the full mesh + deploy/UI load, so cap at 1g (≈peak + headroom) - # with a 512m reservation. These top-level keys are inherited by every service - # that uses `<<: *otopcua-host` (YAML merge keeps the anchor's scalar keys; only - # the `environment` block is re-declared per service). Compose v2 honors - # `mem_limit`/`mem_reservation`. The full mesh needs ~6g of Docker Desktop VM - # memory — on a constrained host raise the VM memory or run fewer host services. - mem_limit: 1g - mem_reservation: 512m + # climbs sharply under deploy/materialise load: a node materialising its full + # cluster slice (e.g. central → MAIN's galaxy mirror + UNS overlay, ~1400 OPC UA + # nodes) peaks well above 1g during a deploy — a 1g cap OOM-kills it (exit 137). + # Cap at 2g (≈peak + headroom) with a 1g reservation. These top-level keys are + # inherited by every service that uses `<<: *otopcua-host` (YAML merge keeps the + # anchor's scalar keys; only the `environment` block is re-declared per service). + # The full 6-node mesh needs ~12g of Docker Desktop VM memory — on a constrained + # host raise the VM memory or run fewer host services. + mem_limit: 2g + mem_reservation: 1g depends_on: sql: { condition: service_healthy } migrator: { condition: service_completed_successfully }