Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 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 трябва да форкне основен процес, за да избегне фалшифицирането на смъртта на основния процес при записване на данни на твърдия диск, и след това да завърши операцията по запазване на данни на твърдия диск в процеса на форк, ако основният процес използва 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 #
Windows версията на Redis запазва heap паметта от системния файл за пейджинг
за споделяне с разклонения процес, използван за операции по запазване. В момента няма достатъчно непрекъснато свободно пространство в
Системен файл за пейджинг. Може да увеличите размера на системния файл за пейджинг.
Понякога рестартирането може да дефрагментира системния файл за странициране достатъчно за
Тази операция да бъде успешно завършена.

Редис не може да продължи. Излизане.
[8984] 14 май 14:05:09.278 # операцията на вилката се провали



След анализ се оказа, че проблемът с максималната конфигурация на купчина "maxheap" се дължи на недостатъчна налична памет.

Решение

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


# Redis купчината трябва да е по-голяма от стойността, зададена от максималната памет
# флаг, тъй като heap alocator-ът има свои собствени изисквания за памет и
# Фрагментацията на купчината е неизбежна. Ако само флагът maxmemory е
# Посочено, maxheap ще бъде настроен на 1.5*maxmemory. Ако максималният флаг е
# е посочено заедно с maxmemory, флагът maxheap ще бъде автоматично
# увеличено, ако е по-малко от 1.5*максимална памет.
#  
# Максхийп <bytes>

Добавянето на тази настройка е добре,Услугата Redis не стартира!!!!!!!
По подразбиране стойността е: maxheap 1024000000≈976.56M

Не намерих този коментар в conf файла, намерих нещо такова:
# Не използвайте повече памет от зададения брой байтове.
# Когато лимитът на паметта достигне, Redis ще се опита да премахне ключовете
# според избраната политика за изгонване (виж maxmemory-policy).
#
# Ако Redis не може да премахва ключове според политиката, или ако политиката е
# настроен на 'noeviction', Redis ще започне да отговаря с грешки в команди
# които ще използват повече памет, като SET, LPUSH и т.н., и ще продължат
# за да отговаря на команди само за четене като GET.
#
# Тази опция обикновено е полезна при използване на Redis като LRU кеш или за настройка
# твърд лимит на паметта за инстанция (използвайки политиката 'noeviction').
#
# ВНИМАНИЕ: Ако имате свързани роби към инстанция с включена максимална памет,
# размерът на изходните буфери, необходими за захранване на слугите, се изважда
# от броя използвана памет, така че мрежовите проблеми / ресинхронизацията ще
# да не задейства цикъл, при който ключовете се изхвърлят, и съответно изходът
# буферът от роби е пълен с изхвърлени ключове DEL, което задейства изтриването
# от още ключове и така нататък, докато базата данни не се изпразни напълно.
#
# Накратко... Ако имате прикрепени роби, се препоръчва да се постави по-ниска
# лимит за maxmemory, така че да има свободна RAM памет в системата за slave
# изходни буфери (но това не е необходимо, ако политиката е 'noeviction').
#
# ВНИМАНИЕ: ако не се настрои maxmemory, Redis ще прекрати с
# изключение извън паметта, ако се достигне лимитът на купчината.
#
# ЗАБЕЛЕЖКА: тъй като Redis използва системния пейджинг файл, за да задели паметта на купчина,
# Използването на паметта на Работното множество, показвано от Диспечера на задачите на Windows или от други
# инструменти като ProcessExplorer не винаги са точни. Например, точно така
# след фоново запазване на RDB или AOF файловете, стойността на работния набор
# може да спадне значително. За да се провери правилното количество използвана памет
# чрез redis-server за съхранение на данните, използвайте клиентската команда INFO. ИНФОРМАЦИЯТА
# показва само паметта, използвана за съхранение на redis данните, а не допълнителната
# памет, използвана от Windows процеса за собствените му изисквания. Th3 допълнително количество
# от паметта, която не е отчетена от командата INFO, може да се изчисли чрез изваждане на
# Пик работен набор, докладван от диспечера на задачите на Windows и used_memory_peak
# докладвано от командването INFO.
#
# максмемори <bytes>

Предупреждение: Ако се достигне лимитът на heap, незадаването на maxmemory ще доведе до прекратяване на Redis с изключение извън паметта.

Забележка: Поради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.00К
maxmemory:0
maxmemory_human:0B
maxmemory_policy:неизгонване
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
# волатилно-рандомно -> премахване на случаен ключ с изтекъл набор
# всички ключове-случайни -> премахнете случаен ключ, който и да е ключ
# volatile-ttl -> премахнете ключа с най-близкото изтичане (минорен TTL)
# noeviction -> изобщо не изтичат, просто връщат грешка при операции по запис
#
# Забележка: при която и да е от горните политики, Redis ще върне грешка при запис
# операции, когато няма подходящи ключове за изгонване.
#
# Към датата на писане тези команди са: set setnx setex append
# incr decr rpush lpush rpushx lpushx linsert lset rpoplpush sadd
# синтер синтерстор, сунион, синдиф, сдифстор, зад цинкърби, синкерби.
# zunionstore zinterstore hset hset, hset, 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 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

Проблемът с редис китайски не може да бъде показан правилно
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

Разликата между save и 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