SystemdDoctor
служба не работает кеш память

Кеширующий сервер падает: мало места под разделяемую память

Кеширующий сервер держит журнал работы в разделяемой памяти на временной файловой системе. Если раздел меньше заявленного размера, служба либо не запускается, либо теряет записи. Раздел этот отдельный и по умолчанию невелик.

Вероятные причины

По порядку: сверху то, что встречается чаще.

  1. Раздел временной файловой системы меньше заявленного размера

    Служба заявляет размер журнала работы, а раздел его не вмещает. Запуск отказывает.

  2. Кеш в памяти больше доступной памяти

    Заявленный размер кеша в памяти вместе с накладными расходами превышает доступное, и процесс останавливается ядром.

  3. Журнал работы теряется при перезапуске

    Разделяемая память очищается при перезапуске службы. Сбор статистики и разбор по журналу работы после перезапуска невозможны.

Диагностика

Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.

Сообщения службы при запуске.

journalctl -u varnish -n 30 --no-pager

Раздел под разделяемую память и его размер.

findmnt /var/lib/varnish -o TARGET,FSTYPE,SIZE,AVAIL

Заявленные размеры кеша и журнала работы.

systemctl cat varnish | grep -i ExecStart

Решение

Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.

1. Раздел временной файловой системы меньше заявленного размера
Почему происходит
Служба заявляет размер журнала работы, а раздел его не вмещает. Запуск отказывает.
Как проверить
Посмотрите заявленный размер и раздел.
systemctl cat varnish 2>/dev/null | grep -iE "ExecStart|-l "
findmnt /var/lib/varnish -o TARGET,FSTYPE,SIZE 2>/dev/null
Как исправить
Увеличьте раздел под разделяемую память или уменьшите заявленный размер журнала работы. Выносить его на диск не стоит: это замедлит службу.
2. Кеш в памяти больше доступной памяти
Почему происходит
Заявленный размер кеша в памяти вместе с накладными расходами превышает доступное, и процесс останавливается ядром.
Как проверить
Посмотрите заявленный размер кеша и память.
systemctl cat varnish 2>/dev/null | grep -oE "malloc,[0-9]+[mMgG]"
free -h; systemctl show varnish -p MemoryMax 2>/dev/null
Как исправить
Задайте размер кеша с запасом от доступной памяти и согласуйте его с пределом памяти службы. Накладные расходы заметны и их надо учитывать.
3. Журнал работы теряется при перезапуске
Почему происходит
Разделяемая память очищается при перезапуске службы. Сбор статистики и разбор по журналу работы после перезапуска невозможны.
Как проверить
Посмотрите время запуска службы и доступность журнала работы.
systemctl show varnish -p ExecMainStartTimestamp 2>/dev/null
varnishstat -1 2>/dev/null | head -5
Как исправить
Собирайте статистику непрерывно отдельной службой, а не по запросу. Иначе каждый перезапуск обнуляет картину.

Пример вывода

Раздел меньше заявленного размера журнала работы. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.

varnishd[7700]: Error: Cannot open /var/lib/varnish/vsm_mgt/_.index: No space left on device
varnishd[7700]: (-junix,user=varnish) failed to create shared memory
systemd[1]: varnish.service: Main process exited, code=exited, status=1/FAILURE

Связанные ошибки

Источники

  • Документация Varnish документация программы
    сверено 15 сентября 2026
  • Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
    Воспроизведено уменьшением раздела под разделяемую память.
    собственная проверка, systemd 255
    сверено 15 сентября 2026