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

Redis: OOM command not allowed when used memory exceeds maxmemory

Сообщение об отказе записи при исчерпании памяти означает, что Redis достиг заданного предела и не может ничего вытеснить: политика запрещает. Служба работает и отвечает на чтение — это защита данных, а не сбой.

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

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

  1. Политика вытеснения запрещает удаление

    При значении noeviction Redis не удаляет ключи сам и отказывает в записи. Это правильный выбор для хранилища данных и неправильный для кеша.

  2. Предел памяти не задан, и упор произошёл в предел службы

    Без maxmemory Redis растёт, пока не упрётся в предел контрольной группы, и тогда его убивает ядро — это хуже отказа в записи.

  3. Ключи без срока жизни

    Политика вытеснения по сроку не может освободить память, если срок не задан ни у одного ключа.

Диагностика

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

Потребление, предел и объём вытесненного.

redis-cli info memory | head -10

Предел и политика вытеснения.

redis-cli config get maxmemory maxmemory-policy

Предел памяти службы.

systemctl show redis-server -p MemoryMax -p MemoryPeak

Решение

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

1. Политика вытеснения запрещает удаление
Почему происходит
При значении noeviction Redis не удаляет ключи сам и отказывает в записи. Это правильный выбор для хранилища данных и неправильный для кеша.
Как проверить
Посмотрите предел и политику.
redis-cli config get maxmemory maxmemory-policy
redis-cli info memory | head -8
Как исправить
Для кеша выберите политику вытеснения по давности использования. Для хранилища данных поднимайте предел и следите за ростом.
redis-cli config set maxmemory-policy allkeys-lru
2. Предел памяти не задан, и упор произошёл в предел службы
Почему происходит
Без maxmemory Redis растёт, пока не упрётся в предел контрольной группы, и тогда его убивает ядро — это хуже отказа в записи.
Как проверить
Посмотрите оба предела.
redis-cli config get maxmemory
systemctl show redis-server -p MemoryMax -p MemoryPeak
Как исправить
Задайте maxmemory ниже предела службы: тогда Redis будет управлять памятью сам, а не погибать от ядра.
3. Ключи без срока жизни
Почему происходит
Политика вытеснения по сроку не может освободить память, если срок не задан ни у одного ключа.
Как проверить
Посмотрите статистику по срокам.
redis-cli info keyspace
Как исправить
Задавайте срок жизни ключам кеша либо используйте политику, которая вытесняет любые ключи.

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

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

redis-server[1200]: # WARNING: OOM command not allowed when used memory > 'maxmemory'
app[4100]: error: OOM command not allowed when used memory > 'maxmemory'.

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

Где встречается чаще всего

Источники

  • Документация Redis: политики вытеснения документация программы
    сверено 15 сентября 2026
  • Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
    Воспроизведено при maxmemory 16 МБ и политике noeviction.
    собственная проверка, systemd 255
    сверено 15 сентября 2026