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:
@@ -13,7 +13,15 @@ Prometheus, Grafana и общая база Postgres для метаданных.
|
||||
|
||||
## Быстрый старт
|
||||
|
||||
Нужны Docker с Compose. Полная проверка также использует `curl`, `jq`, `awk`,
|
||||
Нужны Docker с Compose и около 8 ГБ памяти, доступной Docker. Это не объём
|
||||
ноутбука, а то, что отдано самому Docker: в Docker Desktop и WSL2 он живёт
|
||||
внутри виртуальной машины и получает лишь часть памяти хозяина. Сколько выдано
|
||||
сейчас, в байтах, покажет `docker info --format '{{.MemTotal}}'`. В WSL2 это
|
||||
поднимается параметром `memory` в файле `.wslconfig` домашнего каталога
|
||||
пользователя Windows; после правки нужен `wsl --shutdown`. Если своей машины не
|
||||
хватает, стенд одинаково хорошо живёт на недорогом VPS.
|
||||
|
||||
Полная проверка также использует `curl`, `jq`, `awk`,
|
||||
`grep`, `sed`, `tail`, `sleep` и `timeout`. По умолчанию должны быть свободны
|
||||
порты `23000`, `28080`, `28088`, `28123`, `28124`, `29000`, `29001`, `29090`
|
||||
и `29092`. Для статической проверки `make config-test` нужен `uv`.
|
||||
@@ -51,8 +59,10 @@ Superset, создаёт администратора и импортирует
|
||||
и `test_kafka`, метаданные и подключение Superset. Первый пробник создаёт
|
||||
таблицы на обеих нодах и читает через `Distributed` на ноде 2 строку из
|
||||
локальной таблицы ноды 1. Второй пишет в Kafka и читает свой маркер. В конце
|
||||
проверка ждёт 20 секунд покоя, печатает общую память контейнеров и падает при
|
||||
превышении 3,4 ГБ. Временный топик проверки с машины и запуски DAG удаляются;
|
||||
проверка спрашивает у Docker, не убивало ли ядро какой-нибудь долгоживущий
|
||||
контейнер за нехватку памяти и не включалась ли политика перезапуска: убитый
|
||||
контейнер Docker поднимает сам, и проверка состояния об этом промолчит.
|
||||
Временный топик проверки с машины и запуски DAG удаляются;
|
||||
постоянный топик пробника сохраняется, а старые записи чистит Kafka.
|
||||
|
||||
`make smoke-cluster` запускает отдельную глубокую проверку ClickHouse: описание
|
||||
|
||||
Reference in New Issue
Block a user