fix(stand): снят несуществующий бюджет памяти, нодам ClickHouse — 4 ГиБ
Зачем Стенд упирался в память ноды ClickHouse: пробник валился на CREATE TABLE ON CLUSTER, вместе с ним краснели make smoke и make smoke-guards. Причина не та, что предполагал #21: дело не в заводских кэшах, а в коробке на гигабайт. Около 550 МиБ RSS праздной ноды — страницы её собственного бинарника, и на работу оставалось около 350 МиБ, которые пробник добирал за сессию. Заодно выяснилось, откуда взялся предел 3,4 ГБ. Это была оценка расхода из спеки, посчитанная по стенду-предшественнику до первой сборки v2 и превращённая в жёсткий порог проверки. Порог стал критерием приёмки каждого этапа и дальше блокировал бы любой рост стенда на этапах 2-9. Что - ADR 0004: бюджета памяти у стенда нет, есть требование к машине — около 8 ГБ, доступных Docker. Ресурсный довод ADR 0001 отозван, сами решения в силе. - Нодам ClickHouse 4 ГиБ вместо гигабайта. Остальные лимиты не тронуты: ни один из них ни разу не сработал, а снять их скопом — то же изменение без свидетельств, каким они были выставлены. - Из make smoke убрана проверка суммарного потребления. Она мерила docker stats вместе со страничным кэшем, то есть отвечала на вопрос «сколько файлов стенд потрогал», и с появлением настоящих данных краснела бы на здоровом стенде. Вместе с ней убрана привязанная к её сообщению проверка docs-guards. - Взамен smoke спрашивает у Docker, не убивало ли ядро долгоживущий контейнер за память и не включалась ли политика перезапуска. Порога у проверки нет: убитый контейнер Docker поднимает сам, и без этого вопроса стенд отрапортует «всё хорошо» о ноде, которая умирала. - README и раздел «Ресурсный бюджет» спеки переписаны с предела на требование к машине; README объясняет менти, что такое «память, доступная Docker». Проверка make config-test; make up; make smoke — 25 из 25; make smoke-cluster — 8 из 8; make smoke-guards — 3 из 3, включая шаг «после восстановления стенд проходит make smoke», который падал 31 июля. На живом стенде с новой коробкой: max_server_memory_usage = 3,60 ГиБ, в журнале ноды «Lowered mark cache size to 2.00 GiB because the system has limited RAM». Семантика счётчиков Docker снята отдельными контейнерами: ручной restart оставляет RestartCount = 0, убийство за память даёт OOMKilled = true и растущий счётчик, убийство не за память OOMKilled не поднимает. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -18,7 +18,6 @@ set -euo pipefail
|
||||
|
||||
readonly ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||||
readonly README="$ROOT_DIR/README.md"
|
||||
readonly SMOKE="$ROOT_DIR/scripts/stand-smoke.sh"
|
||||
passed=0
|
||||
|
||||
fail() {
|
||||
@@ -93,25 +92,10 @@ restart_lesson_present() {
|
||||
' "$README"
|
||||
}
|
||||
|
||||
# Единица памяти в отчёте проверки — русская «ГБ», а не латинская «GB»
|
||||
# (контракт языка из AGENTS.md). Здесь успех — это отсутствие образца, поэтому
|
||||
# код возврата grep разбирается вручную: 1 — не нашли, и это хорошо; 0 — нашли
|
||||
# латинское; больше 1 — сам grep не отработал, и молчать об этом нельзя.
|
||||
smoke_uses_russian_unit() {
|
||||
local status=0
|
||||
grep -q '3,4 GB' "$SMOKE" || status=$?
|
||||
case "$status" in
|
||||
1) return 0 ;;
|
||||
0) return 1 ;;
|
||||
*) fail "не удалось проверить обозначение единицы памяти в $SMOKE" ;;
|
||||
esac
|
||||
}
|
||||
|
||||
check 'README перечисляет HTTP- и нативные порты обеих нод' ports_documented
|
||||
check 'README объясняет сброс томов после смены исходных учётных данных' clean_advice_present
|
||||
check 'список портов остаётся единым списком' ports_stay_one_list
|
||||
check 'README перечисляет малые проверки пробников в составе config-test' probe_checks_documented
|
||||
check 'README требует перезапуск ClickHouse после изменения настройки метрик' restart_lesson_present
|
||||
check 'отчёт проверки использует русское обозначение ГБ' smoke_uses_russian_unit
|
||||
|
||||
printf 'ИТОГ: пройдено %d, ошибок 0\n' "$passed"
|
||||
|
||||
Reference in New Issue
Block a user