fix(stand): снят несуществующий бюджет памяти, нодам ClickHouse — 4 ГиБ #25

Merged
ddmitry merged 3 commits from feat/21-resource-limits into main 2026-08-01 15:29:09 +03:00
2 changed files with 4 additions and 15 deletions
Showing only changes of commit 8778567266 - Show all commits
+1 -4
View File
@@ -15,10 +15,7 @@ x-clickhouse-common: &clickhouse-common
clickhouse-keeper:
condition: service_healthy
ulimits: *clickhouse-nofile
# Не гигабайт: около 550 МиБ от RSS праздной ноды — страницы её собственного
# бинарника, и рабочего места почти не оставалось. Лимит не бронь: в покое
# нода занимает столько же, а коробка задаёт, где сервер включает
# предохранители — свои кэши и сброс на диск (ADR 0004).
# Гигабайта не хватало: половину съедали страницы самого бинарника (ADR 0004).
mem_limit: 4g
healthcheck:
test: ["CMD-SHELL", "clickhouse-client --host 127.0.0.1 --query 'SELECT 1' >/dev/null 2>&1"]
+3 -11
View File
@@ -590,15 +590,8 @@ check_superset() {
fi
}
# Контейнер, убитый ядром за нехватку памяти, Docker поднимает сам, и через
# полминуты его проверка состояния снова зелёная: о смерти она не расскажет.
# Поэтому спрашиваем у Docker два факта — убивало ли ядро что-нибудь в контейнере
# за память и включалась ли политика перезапуска. Ручной `docker compose restart`
# счётчик не трогает, так что документированный перезапуск нод проверку не
# роняет. Порога здесь нет: это «да или нет», а не бюджет памяти (ADR 0004).
#
# Два факта берутся одним `--format` и разбираются образцом — тем же приёмом,
# что и состояние с проверкой здоровья выше.
# Убитый за память контейнер Docker поднимает сам, и проверка здоровья об этом
# промолчит. Порога здесь нет: это «да или нет», а не бюджет памяти (ADR 0004).
check_containers_survived() {
local container_id
local service
@@ -614,8 +607,7 @@ check_containers_survived() {
state="$(docker inspect --format '{{.State.OOMKilled}}/{{.RestartCount}}' "$container_id" 2>/dev/null || true)"
case "$state" in
false/0) ;;
# OOMKilled поднимается и когда ядро убило процесс внутри живого
# контейнера, поэтому говорим про процесс, а не про контейнер.
# OOMKilled встаёт и когда убит процесс внутри живого контейнера.
true/*)
fail "в контейнере ${service} ядро убило процесс из-за нехватки памяти"
problems=$((problems + 1))