Skip to content

feat: model limitów RAM (stały cap + pula zmienna) + minimum 12 GB#5

Merged
mpasternak merged 4 commits into
mainfrom
feature/resource-limits-12gb-redesign
Jun 1, 2026
Merged

feat: model limitów RAM (stały cap + pula zmienna) + minimum 12 GB#5
mpasternak merged 4 commits into
mainfrom
feature/resource-limits-12gb-redesign

Conversation

@mpasternak

Copy link
Copy Markdown
Member

Co i dlaczego

Przeprojektowanie make configure-resources oraz domyślnych limitów RAM. Dotychczas skrypt sizingował tylko 7 usług płaskim podziałem wagowym, a ~10 pozostałych korzystało z często przewymiarowanych defaultów compose (flower 768m, alloy 384m), których configure-resources nigdy nie ruszał.

Nowy model odzwierciedla realne zużycie RAM stacka:

  • FIXED (stały cap, ~3,3 GB łącznie) — usługi o przewidywalnym apetycie dostają sztywny sufit i są odejmowane od budżetu w pierwszej kolejności.
  • VARIABLE (floor + waga nadwyżki)dbserver/appserver/workery dzielą pozostałą pulę: floor + nadwyżka × waga (db 40% / app 25% / wg 20% / wd 15%).
pula     = (RAM hosta − rezerwa OS) − Σ(stałe capy)
nadwyżka = pula − Σ(floory)

Minimum 12 GB RAM

Σ(fixed 3,3 GB) + Σ(floory 6,5 GB) + rezerwa OS (2 GB) ≈ 12 GB — to próg, w którym wszystkie minima się mieszczą (dbserver na floorze, zerowa nadwyżka). Zalecane 16 GB+. Poniżej 12 GB skrypt przypisuje floory i ostrzega o ryzyku OOM. Wymaganie udokumentowane w README + docs/instalacja (para synchroniczna) oraz docs/konfiguracja/limity-zasobow.md.

Capy

Stały cap Zmienne floor waga
redis 1g · netdata 320m · authserver 320m celerybeat 320m · denorm-queue 320m alloy 192m · loki 192m · grafana 192m dbserver 1.5g 40%
flower 128m · webserver 256m dozzle 64m · ofelia 64m · autoheal 32m appserver 2g 25%
worker-general/denorm 1.5g 20%/15%

Po review podniesiono alloy/loki ze 128m → 192m (spike przy logach). flower zostaje 128m, ale dostaje FLOWER_MAX_TASKS=10000, żeby ograniczyć historię w RAM i uczynić cap bezpiecznym.

Audyt pokrycia

Trzy kontenery celowo bez limitu (udokumentowane): backup-runner (batch), certbot (krótkie zadanie SSL), workerserver-status (celery status, profil manual).

Backwards-compat

Podniesienie sufitu jest bezpieczne (więcej zapasu, nie więcej OOM). Jedyne ryzyko to obniżone sufity (alloy/loki/flower) na istniejących instalacjach przy git pull && make up — flower chroniony przez --max-tasks, alloy/loki podniesione do 192m. Brak ręcznego kroku w .env (defaulty compose działają automatycznie). REDIS_MAXMEMORY domyślnie 200mb w compose, podnoszony tylko przy ponownym configure-resources, więc bump sufitu redisa jest bezpieczny.

Zmiany

  • scripts/configure-resources.sh — model FIXED+VARIABLE, zapis MEM dla wszystkich 17 usług (.env = jedno źródło prawdy) + REDIS_MAXMEMORY; CPU bez zmian (te same 7 usług); próg ostrzeżenia 6→12 GB; bash 3.2-safe (macOS — bez declare -A).
  • Defaulty compose zsynchronizowane z nowymi capami; flower --max-tasks.
  • tests/test_makefile.sh — nowy test_configure_resources (13 asercji, deterministyczne capy). 132 passed, 0 failed.
  • Docs + README; mkdocs build --strict: OK.

Follow-up (osobny PR)

Per-service WEB_CONCURRENCY (gunicorn: appserver/authserver) + celery concurrency (workery), liczone memory-aware z MEM_LIMIT i liczby CPU. Blocker: wymaga weryfikacji, czy obrazy iplweb/bpp_* honorują te zmienne (entrypoint może mieć zaszyte --workers/--concurrency).

🤖 Generated with Claude Code

mpasternak and others added 4 commits June 1, 2026 17:58
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Zastepuje plaski podzial wagowy modelem FIXED (staly cap, odejmowany od
budzetu) + VARIABLE (floor + waga nadwyzki: db 40 / app 25 / wg 20 / wd 15).
Skrypt zapisuje teraz MEM_LIMIT dla wszystkich 17 uslug (.env = jedno zrodlo
prawdy) + REDIS_MAXMEMORY; CPU bez zmian (te same 7 uslug). Prog ostrzezenia
malego hosta podniesiony do 12 GB (minimum BPP). Bash 3.2-safe (macOS).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Capy docieraja do instalacji bez configure-resources przez ${VAR:-default}:
redis 256m->1g, netdata 256m->320m, alloy 384m->192m, loki 256m->192m,
flower 768m->128m, worker-general/denorm 1g->1536m, appserver 1g->2g.
Flower dostaje FLOWER_MAX_TASKS=10000 zeby cap 128m byl bezpieczny.

Podniesienie sufitu jest bezpieczne (wiecej zapasu); obnizone (alloy/loki/
flower) to jedyne ryzyko OOM dla istniejacych instalacji - flower chroniony
przez --max-tasks, alloy/loki podniesione do 192m wzgledem pierwotnych 128m.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
README + docs/instalacja (para synchroniczna) zyskuja sekcje wymagan
sprzetowych: min 12 GB RAM, zalecane 16 GB+. docs/konfiguracja/limity-zasobow
przepisane na model FIXED (staly cap) + VARIABLE (floor + waga nadwyzki), z
nowa tabela capow, uwaga o netdata cap vs retencja i trzema uslugami bez limitu
(backup-runner, certbot, workerserver-status). mkdocs build --strict: OK.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@mpasternak mpasternak merged commit 96ae76a into main Jun 1, 2026
4 of 5 checks passed
@mpasternak mpasternak deleted the feature/resource-limits-12gb-redesign branch June 1, 2026 16:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant