Кеш: стеля памʼяті вимагає ще й обмеження потоків
All checks were successful
CI / hygiene (push) Successful in 7s
CI / web (push) Successful in 44s
CI / server (push) Successful in 1m23s
CI / agent (push) Successful in 58s

Учора додав Dragonfly `--maxmemory`, щоб він не рахував ту саму
памʼять, яку вже порахував PG_SHARED_BUFFERS. На стенді це поклало
кеш у цикл перезапусків:

    There are 4 threads, so 1.00GiB are required. Exiting...

Dragonfly вимагає 256 МБ на КОЖЕН потік вводу-виводу, а їх за
замовчуванням стільки ж, скільки ядер. На 4-ядерній машині стеля 512 МБ
означає «потрібен 1 ГіБ» — і відмову стартувати. Тепер потоків два:
для кешу сесій з запасом, і 512 МБ їм вистачає.

Друга половина помилки тихіша: `command:` ЗАМІНЮЄ команду образу, а не
доповнює її, тож разом зі стелею я загубив `--logtostderr`. Журнал
пішов у файл усередині контейнера — тобто `docker logs` мовчав би, і
контейнер, що падає в циклі, виглядав би як контейнер без проблем.
Обидва слова повернуто явно.

Знайдено відкриттям порту трапів: кеш ліг при тому ж перезапуску, і
якби не порожній `docker logs`, я шукав би причину значно довше.
This commit is contained in:
byrsapty 2026-08-27 20:07:12 +03:00
parent e98d51fe76
commit 25da4ffea8

View file

@ -113,7 +113,22 @@ services:
# PG_SHARED_BUFFERS. На машині з 4 ГБ два незалежні розрахунки
# чверті одного пирога закінчуються тим, що ядро вбиває когось
# третього, найімовірніше API. Установник задає обидві цифри разом.
command: ["--maxmemory=${DRAGONFLY_MAXMEMORY:-512mb}"]
# Штатна команда образу — `dragonfly --logtostderr`; command її
# ЗАМІНЮЄ, а не доповнює, тому обидва слова тут обов'язкові. Без
# --logtostderr журнал іде у файл усередині контейнера, тобто
# `docker logs` мовчить — і контейнер, що падає в циклі, виглядає
# як контейнер без проблем.
#
# --proactor_threads не косметика, а умова роботи: Dragonfly вимагає
# 256 МБ на КОЖЕН потік вводу-виводу й відмовляється стартувати,
# якщо стеля менша. За замовчуванням потоків стільки ж, скільки
# ядер, тож на 4-ядерній машині стеля 512 МБ дає «потрібен 1 ГіБ,
# виходжу». Два потоки для кешу сесій — з запасом.
command:
- dragonfly
- --logtostderr
- --maxmemory=${DRAGONFLY_MAXMEMORY:-512mb}
- --proactor_threads=${DRAGONFLY_THREADS:-2}
volumes:
- cache-data:/data
restart: unless-stopped