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

Вид: 47166|Ответ: 1

[Источник] Redis MISCONF Redis настроен на сохранение снимков RDB

[Скопировать ссылку]
Опубликовано 2021-5-14 21:18:50 | | | |
При использовании StackExchange.Redis для обработки кэша redis ошибка следующая:

StackExchange.Redis.RedisServerException: MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about the error.

Временное решение, изменять файл redis.windows.conf,Сервис Redis нужно перезапустить, установлен следующим образом:
Если вы не хотите перезапускать сервис Redis, можно использовать команду redis-cli и настроить её следующим образом:



Объяснение следующее:
# По умолчанию Redis перестанет принимать записи, если RDB-снимки включены
# (по крайней мере одна точка сохранения) и последнее фоновое сохранение провалилось.
# Это даст пользователю понять (в жёстком смысле), что данные не сохраняются
# правильно на диске, иначе, скорее всего, никто не заметит, и некоторые
# Катастрофа случится.
#
# Если процесс фонового сохранения снова начнёт работать, Redis начнёт работать
# автоматически разрешаю запись снова.
#
# Однако, если вы настроили правильный мониторинг сервера Redis
# и постоянство, возможно, стоит отключить эту функцию, чтобы Redis
# продолжать работать как обычно, даже если возникают проблемы с диском,
# разрешения и так далее.
Проще говоря: Redis нужно форковать основной процесс, чтобы избежать имитации смерти основного процесса при сохранении данных на жёсткий диск, а затем завершить операцию сохранения данных на жёсткий диск в процессе форка; если основной процесс использует 4 ГБ памяти, требуется дополнительно 4 ГБ, когда подпроцесс форка понадобится, в этот момент памяти недостаточно, форк выходит из строя, и тогда жёсткий диск с сохранением данных тоже выходит из строя.

Чтобы просмотреть логи redis, нужно настроить redis.windows.conf следующим образом:

# Укажите имя файла журнала. Также «stdout» можно использовать для форсирования
# Redis для входа на стандартный выход.
logfile "E:/Redis-x64-3.2.100/redis.txt"

Исключения логарифма следующие:

[8984] 14 мая 14:05:09.060 * Сохранение фона начато с помощью pid 8672
[8672] 14 мая 14:05:09.169 #
Версия Redis для Windows сохраняет кучную память из файла системного страницирования
для совместного использования с форкированным процессом, используемым для операций сохранения. В настоящее время недостаточно непрерывного свободного пространства в
системный пейджинг. Вы можете увеличить размер файла системного пейджинга.
Иногда перезагрузка достаточно дефрагментирует файл системного пейджинга, чтобы
Операция была успешно завершена.

Редис не может продолжать. Выход.
[8984] 14 мая 14:05:09.278 # работа вилки не удалась



После анализа выяснилось, что проблема с конфигурацией максимального размера кучи «maxheap» связана с недостатком доступной памяти.

Решение

Откройте конфигурационный файл Redis "redis.windows.conf" и найдите следующий раздел кода:


# Куча Redis должна быть больше значения, указанного максимальной памятью
# флаг, так как у кучного аллокатора есть свои собственные требования к памяти и
# Фрагментация кучи неизбежна. Если только флаг maxmemory — это
# Указано, maxheap будет установлен на 1.5*maxmemory. Если флаг maxheap —
# указано вместе с maxmemory, флаг maxheap будет автоматически
# увеличивается, если он меньше 1.5*max памяти.
#  
# Maxheap <bytes>

Добавление этой настройки — это хорошо,Сервис Redis не запускается!!!!!!!
Значение по умолчанию: maxheap 1024000000≈976.56M

Я не нашёл этот комментарий в файле conf, я нашёл что-то вроде этого:
# Не используйте больше памяти, чем указанное количество байт.
# Когда лимит памяти достигнут, Redis попытается удалить ключи
# согласно выбранной политике выселения (см. maxmemory-policy).
#
# Если Redis не может удалить ключи согласно политике, или если политика
# установлен на 'noeviction', Redis начнёт отвечать ошибками в командах
#, которые будут использовать больше памяти, например SET, LPUSH и так далее, и продолжают работать
# отвечать только на команды для чтения, такие как GET.
#
# Эта опция обычно полезна при использовании Redis как кэша LRU или для установки
# Жёсткий лимит памяти для экземпляра (с использованием политики 'noeviction').
#
# ПРЕДУПРЕЖДЕНИЕ: Если к экземпляру прикреплены слейпы с включённой maxmemory,
# размер выходных буферов, необходимых для питания подчинённых, вычитается
# от количества использованной памяти, так что проблемы с сетью / ресинхронизации будут
# не запускать петлю, в которой убираются ключи, а затем и выход
# Buffer of slaves заполнен DEL ключей, которые выведут удаление
# дополнительных ключей и так далее, пока база данных полностью не опустошается.
#
# Короче говоря... Если к вам прикреплены рабы, рекомендуется установить более низкий
# лимит для maxmemory, чтобы в системе оставалась свободная оперативная память для слейва
# буферы выхода (но это не обязательно, если политика — 'noeviction').
#
# ВНИМАНИЕ: если не установить maxmemory, Redis завершит
# исключение вне памяти, если достигнут лимит кучи.
#
# ПРИМЕЧАНИЕ: поскольку Redis использует файл системного пейджинга для выделения памяти кучи,
# Использование рабочей памяти, отображаемое диспетчером задач Windows или другим
# инструменты, такие как ProcessExplorer, не всегда будут точными. Например, правильно
# после фонового сохранения файлов RDB или AOF, значение рабочего множества
# может значительно упасть. Чтобы проверить правильное количество используемой памяти
# через redis-server для хранения данных используйте команду INFO client. ИНФОРМАЦИЯ
Команда # показывает только память, используемую для хранения данных Redis, а не лишнюю
# памяти, используемой процессом Windows для собственных требований. Th3 дополнительное количество
# памяти, не сообщаемой командой INFO, можно вычислить, вычитая
# Пиковый рабочий набор сообщается диспетчером задач Windows и used_memory_peak
# сообщается командой INFO.
#
# maxmemory <bytes>

Внимание: если лимит кучи достигнут, отсутствие максимальной памяти приведёт к завершению Redis с исключением вне памяти.

Примечание: из-заRedis использует файлы системного пейджинга для выделения кучной памяти

Диспетчер задач Windows или другие инструменты, такие как ProcessExplorer, не всегда показывают точное использование памяти рабочих наборов. Проще говоря,Использование памяти, отображаемое диспетчером задач, неточно!!!

Используйте команду info для следующего запроса:

# Память
used_memory:2011338768
used_memory_human:1.87G
used_memory_rss:2011279992
used_memory_rss_human:1.87G
used_memory_peak:2011338768
used_memory_peak_human:1.87G
total_system_memory:0
total_system_memory_human:0B
used_memory_lua:37888
used_memory_lua_human:37.00 км
maxmemory:0
maxmemory_human:0B
maxmemory_policy:noeviction
mem_fragmentation_ratio:1.00
mem_allocator:jemalloc-3.6.0



Настройки следующие:

1073741824 байтов = 1G
После настройки клиент redis .net добавляет ошибку кэша следующим образом:

Команда OOM не допускается при использовании памяти > 'maxmemory'.
# MAXMEMORY POLICY: как Redis выберет, что удалить при maxmemory
# достигнуто. Вы можете выбрать одно из пяти видов поведения:
#
# volatile-lru -> удалить ключ с помощью набора истечения с использованием алгоритма LRU
# allkeys-lru -> удалить любой ключ согласно алгоритму LRU
# волатильно-случайный -> удалить случайный ключ с набором срока действия.
# allkeys-random -> убери случайный ключ, любой ключ
# volatile-ttl -> убрать ключ с ближайшим сроком истечения (незначительный TTL)
# noeviction -> не истекает вовсе, просто возвращает ошибку при операциях записи
#
# Примечание: с любой из вышеуказанных политик Redis выдаст ошибку при записи
# операции, когда нет подходящих ключей для выселения.
#
# На момент написания эти команды: set setnx setex append
# Incr decr rpush lpushx lpushx linsert lset rpoplpush sadd
# sinter sinterstore sunion sunionstore sdiff sdiffstore zadd zincrby
# zunionstore zinterstore hset hsetnx hmset hincrby incrby decrby
# getset mset mset, msetnx exec sort
#
# По умолчанию это так:
#
# Maxmemory-политика невыселения
#MAXMEMORY策略: Когда MAXMEMORY

#到达. Вы можете выбрать один из пяти видов поведения:

#

#volatile LRU-> использует алгоритм LRU для удаления ключей с множествами срока действия

#allkeys LRU-> удалять любой ключ согласно алгоритму LRU

#volatile random — > удалять случайные ключи с просроченными наборами

#allkeys случайных > удалять случайные ключи, произвольные ключи

#volatile TTL-> Удалить ключ с ближайшим сроком действия (Minor TTL)

#noeviction-> вообще не истекает, только возвращает ошибки при записи

#

#注意: Для любой из вышеуказанных стратегий Redis возвращает ошибку при записи

#操作, когда нет подходящего ключа для выселения.

#

#在编写之日, следующие команды: set setnx setex append

#递增递减rpush lpushx lpushx linsert lset rpoplpush sadd

#烧结店sunion sunionstore sdiff sdiffstore zadd zincrby

#zunionstore Zinterstore Hset Hsetnx HMSET Hincrby Incrby Decrby

#getset MSET MSETnx Exec Sorting

#

#默认值为:

#

#maxmemory策略无效
Также нужно настроить следующие конфигурации:

Настройка redis по умолчанию очень консервативна, то есть она не сохраняется после превышения лимита памяти, и политика может быть изменена на алгоритм LRU (наименее используемый алгоритм в последнее время) — новая сохранённая информация заменит старую.

Обзор:

Разница в устойчивости Redis между RDB и AOF
https://www.itsvse.com/thread-9555-1-1.html

Установка Docker запускает кэш Redis
https://www.itsvse.com/thread-8995-1-1.html

Примеры объясняют, что такое проникновение кэша Redis, лавина кэша и разрушение кэша
https://www.itsvse.com/thread-8968-1-1.html

redis wildcards для массового удаления ключей
https://www.itsvse.com/thread-7957-1-1.html

Учебник по установке CentOS 7 Redis 5.0.3
https://www.itsvse.com/thread-7201-1-1.html

Установите расширение redis под php 5.5.7 под CentOS
https://www.itsvse.com/thread-7200-1-1.html

Сколько ключей можно хранить в экземпляре redis и каковы максимальные ключи и значения?
https://www.itsvse.com/thread-6848-1-1.html

Проблема redis Chinese не отображается корректно
https://www.itsvse.com/thread-5032-1-1.html

Redis обеспечивает удалённый доступ
https://www.itsvse.com/thread-5011-1-1.html

Windows не запускает сервис Redis, ошибка 1067: процесс неожиданно завершается.
https://www.itsvse.com/thread-5010-1-1.html

CentOS установил Redis 4.0.8
https://www.itsvse.com/thread-4614-1-1.html

Redis настраивает удалённое подключение и пароли доступа
https://www.itsvse.com/thread-4101-1-1.html

Redis опустошает кэш данных
https://www.itsvse.com/thread-4027-1-1.html

Конфигурация сохранения REDIS и выключенная персистенция
https://www.itsvse.com/thread-4012-1-1.html

Разница между сохранением и bgsave в redis
https://www.itsvse.com/thread-4010-1-1.html

Редис — два метода и принципа персистенции
https://www.itsvse.com/thread-4009-1-1.html

У Redis есть три способа начать
https://www.itsvse.com/thread-4008-1-1.html

Метод Redis для скрытия окон командной строки
https://www.itsvse.com/thread-2988-1-1.html

Задача хеш-хеш-значений Redis
https://www.itsvse.com/thread-2587-1-1.html

5 вещей, которые нужно знать перед использованием Redis
https://www.itsvse.com/thread-2580-1-1.html

Redis изменяет номер порта по умолчанию и устанавливает пароль доступа
https://www.itsvse.com/thread-2577-1-1.html

Redis для загрузки 64-битной версии, официальный адрес для загрузки
https://www.itsvse.com/thread-2576-1-1.html

Redis использует скрипты Lua для подробных объяснений
https://www.itsvse.com/thread-9634-1-1.html

Тест производительности Redis Benchmark
https://www.itsvse.com/thread-9645-1-1.html

(Конец)






Предыдущий:Суждение NPOI по типу даты клетки
Следующий:Подробное объяснение операции NPOI Excel
 Хозяин| Опубликовано 2023-7-12 21:08:55 |
Восемь стратегий исключения памяти Redis
https://www.itsvse.com/thread-10626-1-1.html
Отказ:
Всё программное обеспечение, программные материалы или статьи, публикуемые Code Farmer Network, предназначены исключительно для учебных и исследовательских целей; Вышеуказанный контент не должен использоваться в коммерческих или незаконных целях, иначе пользователи несут все последствия. Информация на этом сайте взята из Интернета, и споры по авторским правам не имеют отношения к этому сайту. Вы должны полностью удалить вышеуказанный контент с компьютера в течение 24 часов после загрузки. Если вам нравится программа, пожалуйста, поддержите подлинное программное обеспечение, купите регистрацию и получите лучшие подлинные услуги. Если есть нарушение, пожалуйста, свяжитесь с нами по электронной почте.

Mail To:help@itsvse.com