Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 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
# і persistence, можливо, варто вимкнути цю функцію, щоб Redis це зробив
# продовжувати працювати як зазвичай навіть якщо виникають проблеми з диском,
# дозволи і так далі.
Простіше кажучи: Redis потрібно форкувати основний процес, щоб уникнути імітації смерті основного процесу при збереженні даних на жорсткий диск, а потім завершити операцію збереження даних на жорсткий диск у процесі форку, якщо основний процес використовує 4GB пам'яті, потрібно додатково 4GB, коли потрібен підпроцес, у цей момент пам'яті недостатньо, форк виходить з ладу, і тоді жорсткий диск для збереження даних також виходить з ладу.

Щоб переглянути журнали 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

Я не знайшов цього коментаря у файлі конференції, я знайшов щось подібне:
# Не використовуйте більше пам'яті, ніж зазначена кількість байтів.
# Коли ліміт пам'яті досягнуто, 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, значення робочого набору
# може суттєво впасти. Щоб перевірити правильну кількість використаної пам'яті
# by redis-server для збереження даних використовуйте команду INFO client. ІНФО
команда # показує лише пам'ять, що використовується для зберігання даних Redis, а не додаткову
# пам'ять, яку використовує процеси Windows для власних вимог. Th3 додаткова кількість
# пам'яті, не зареєстрованої командою INFO, можна обчислити, віднімаючи
# Піковий робочий набір повідомляється диспетчером завдань Windows та used_memory_peak
# повідомляється командуванням INFO.
#
# макспам'ять <bytes>

Попередження: якщо ліміт купи досягнуто, невстановлення maxmemory призведе до завершення Redis через виключення out-of-memory.

Примітка: ЧерезRedis використовує файли системної сторінки для виділення пам'яті купи

Windows Task Manager або інші інструменти, як-от 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.00K
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 -> видалити ключ за допомогою набора expire за допомогою алгоритму LRU
# allkeys-lru -> видалити будь-який ключ згідно з алгоритмом LRU
# волатильно-випадковий -> видалити випадковий ключ із набором терміну дії
# allkeys-random -> прибрати випадковий ключ, будь-який ключ
# волатильно-ttl -> видалити ключ з найближчим терміном дії (незначний TTL)
# noeviction -> взагалі не закінчується, просто повертає помилку при операціях запису
#
# Примітка: з будь-якою з наведених вище політик Redis поверне помилку при записі
# операції, коли немає відповідних ключів для виселення.
#
# На момент написання ці команди: set setnx setex append
# інкр декр рштш лшшіс рпуш лшісх лвстав лсет рпоплшот садд
# сінтер-сінтерстор 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 випадковий — > видаляє випадкові ключі з простроченими наборами

#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 mset-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

Wildcards redis для масового видалення ключів
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

ReIs спорожнює кеш даних
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 Windows 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