diff --git a/compose.yaml b/compose.yaml index 20fa0cb..40f638d 100644 --- a/compose.yaml +++ b/compose.yaml @@ -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"] diff --git a/scripts/stand-smoke.sh b/scripts/stand-smoke.sh index 2e14ef1..3d13b16 100755 --- a/scripts/stand-smoke.sh +++ b/scripts/stand-smoke.sh @@ -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))