Tento článok je zrkadlovým článkom o strojovom preklade, kliknite sem pre prechod na pôvodný článok.

Pohľad: 47166|Odpoveď: 1

[Zdroj] Redis MISCONF Redis je nakonfigurovaný na ukladanie snímk RDB

[Kopírovať odkaz]
Zverejnené 14. 5. 2021 21:18:50 | | | |
Použitím StackExchange.Redis na manipuláciu s redis cache je chyba nasledovná:

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.

Dočasné riešenie, upraviť súbor redis.windows.conf,Službu Redis je potrebné reštartovať, množina nasledovne:
Ak nechcete reštartovať službu Redis, môžete použiť príkaz redis-cli na nastavenie nasledovne:



Vysvetlenie je nasledovné:
# Predvolene Redis prestane prijímať zápisy, ak sú povolené snímky RDB
# (aspoň jeden uložený bod) a posledné uloženie na pozadí zlyhalo.
# To používateľovi (ťažkým spôsobom) uvedomí, že údaje nepretrvávajú
# Na disku správne, inak je pravdepodobné, že si to nikto nevšimne a niektorí
# Katastrofa sa stane.
#
# Ak proces ukladania pozadia opäť začne fungovať, Redis bude fungovať
# automaticky povoľte zápisy znova.
#
# Ak ste však nastavili správne monitorovanie servera Redis
# a perzistencia, možno by ste túto funkciu mali vypnúť, aby Redis mohol
# pokračujte v práci ako obvykle, aj keď sú problémy s diskom,
# povolenia a podobne.
Jednoducho povedané: Redis musí forknúť hlavný proces, aby zabránil tomu, že hlavný proces predstiera smrť pri ukladaní dát na pevný disk, a potom dokončiť operáciu ukladania dát na pevný disk v procese forku. Ak hlavný proces spotrebuje 4GB pamäte, je potrebných ďalších 4GB, keď je potrebný fork podproces, v tomto momente pamäť nestačí, fork zlyhá a potom zlyhá aj ukladací disk na ukladanie dát.

Na zobrazenie redis logov je potrebné nastaviť redis.windows.conf nasledovne:

# Zadajte názov log súboru. Tiež sa dá použiť 'stdout' na vynútenie
# Redis na prihlásenie na štandardný výstup.
logfile "E:/Redis-x64-3.2.100/redis.txt"

Výnimky z logológie sú nasledovné:

[8984] 14. máj 14:05:09.060 * Uloženie pozadia začaté pid 8672
[8672] 14. máj 14:05:09.169 #
Windows verzia Redisu si rezervuje pamäť haldy zo súboru systémového stránkovania
na zdieľanie s rozdeleným procesom používaným na perzistentné operácie. V súčasnosti nie je k dispozícii dostatok súvislého voľného priestoru v
súbor systémového stránkovania. Môžete zväčšiť veľkosť súboru stránkovania systému.
Niekedy reštart defragmentuje systémový stránkovací súbor natoľko, že
táto operácia úspešne dokončená.

Redis nemôže pokračovať. Odchádzajú.
[8984] 14. máj 14:05:09.278 # operácia forku zlyhala



Po analýze sa ukázalo, že problém s maximálnou veľkosťou haldy "maxheap" bol spôsobený nedostatočnou dostupnou pamäťou.

Riešenie

Otvorte konfiguračný súbor Redisu "redis.windows.conf" a nájdite nasledujúcu sekciu kódu:


# Redis halda musí byť väčšia ako hodnota špecifikovaná maxpamäťou
# flag, keďže alokátor haldy má vlastné požiadavky na pamäť a
# Fragmentácia haldy je nevyhnutná. Ak je len príznak maxmemory
# Špecifikovaný, maxheap bude nastavený na 1,5*maxmemory. Ak je príznak maxheap
# Špecifikované spolu s maxmemory, príznak maxheap bude automaticky
# zvýšené, ak je menšie ako 1,5*maxmemory.
#  
# Maxheap <bytes>

Pridanie tohto nastavenia je dobré,Služba Redis sa nespustí!!!!!!!
Predvolená hodnota je: maxheap 1024000000≈976,56M

Tento komentár som v conf súbore nenašiel, našiel som niečo takéto:
# Nepoužívajte viac pamäte ako je určený počet bajtov.
# Keď sa dosiahne pamäťový limit, Redis sa pokúsi odstrániť kľúče
# podľa zvolenej politiky vysťahovania (pozri maxmemory-policy).
#
# Ak Redis nemôže odstrániť kľúče podľa politiky, alebo ak je politika
# nastavené na 'noeviction', Redis začne odpovedať chybami na príkazy
# ktorý by spotreboval viac pamäte, ako SET, LPUSH a podobne, a bude pokračovať
# na odpoveď na príkazy len na čítanie ako GET.
#
# Táto možnosť je zvyčajne užitočná pri používaní Redis ako LRU cache alebo na nastavenie
# pevný limit pamäte pre inštanciu (pomocou politiky 'noeviction').
#
# UPOZORNENIE: Ak máte slave pripojené k inštancii s zapnutou maxmemory,
# Veľkosť výstupných bufferov potrebných na napájanie slave sa odpočíta
# z počtu použitej pamäte, aby sieťové problémy / resynchronizácie
# nespúšťa slučku, kde sú klávesy vyhodené, a tým aj výstup
# buffer slave je plný DEL-ov vyhodených kľúčov, čo spúšťa vymazanie
# ďalších kľúčov a tak ďalej, až kým sa databáza úplne nevyprázdni.
#
# Stručne povedané... Ak máte pripojených otrokov, odporúča sa nastaviť spodnú časť
# limit pre maxmemory, aby v systéme bola voľná RAM pre slave
# výstupné buffery (ale to nie je potrebné, ak je politika 'noeviction').
#
# UPOZORNENIE: ak nenastavíte maxmemory, Redis skončí s
# výnimka mimo pamäte, ak je limit haldy dosiahnutý.
#
# POZNÁMKA: keďže Redis používa systémový stránkovací súbor na alokáciu pamäte haldy,
# využitie pamäte pracovnej sady zobrazené Správcom úloh Windows alebo inými
# nástroje ako ProcessExplorer nebudú vždy presné. Napríklad, vright
# po uložení súborov RDB alebo AOF na pozadí, hodnota pracovnej množiny
# môže výrazne klesnúť. Na kontrolu správneho množstva použitej pamäte
# pri redis-serveri na uloženie dát použite príkaz klienta INFO. The INFO
# ukazuje iba pamäť použitú na uloženie redis dát, nie extra
# pamäť používaná procesom Windows pre vlastné požiadavky. Th3 extra množstvo
# pamäte, ktorá nie je hlásená príkazom INFO, sa dá vypočítať odpočítaním
# Peak Working Set hlásený Správcom úloh Windows a used_memory_peak
# hlásené príkazom INFO.
#
# maxmemory <bytes>

Upozornenie: Ak sa dosiahne limit haldy, nenastavenie maxmemory spôsobí, že Redis skončí s výnimkou mimo pamäte.

Poznámka: KvôliRedis používa systémové stránkovacie súbory na alokáciu pamäte haldy

Windows Task Manager alebo iné nástroje ako ProcessExplorer neukazujú vždy presné využitie pamäte pracovnej sady. Jednoducho povedané,Využitie pamäte zobrazené Správcom úloh nie je presné!!!

Použite príkaz info na dotazovanie nasledovne:

# Spomienka
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: Nevysťahovanie
mem_fragmentation_ratio:1.00
mem_allocator:jemalloc-3.6.0



Nastavenia sú nasledovné:

1073741824 bajtov = 1G
Po nastavení klient redis .net pridá chybu cache nasledovne:

Príkaz OOM nie je povolený pri použití pamäte > 'maxmemory'.
# MAXMEMORY POLICY: ako Redis vyberie, čo odstrániť, keď maxmemory
# je dosiahnuté. Môžete si vybrať z piatich správaní:
#
# Volatile-LRU -> odstrániť kľúč so sadou expire pomocou algoritmu LRU
# allkeys-lru -> odstrániť akýkoľvek kľúč podľa algoritmu LRU
# volatile-random -> odstrániť náhodný kľúč so sadou expire
# allkeys-random -> odstrániť náhodný kľúč, akýkoľvek kľúč
# Volatile-TTL -> odstrániť kľúč s najbližším časom vypršania (menší TTL)
# Noeviction -> vôbec nevyprší, stačí vrátiť chybu pri zápise
#
# Poznámka: pri ktorejkoľvek z vyššie uvedených politík Redis vráti chybu pri zápise
# operácií, keď nie sú vhodné kľúče na vysťahovanie.
#
# V čase písania sú tieto príkazy: setnx setex append
# incr decr rpush lpush rpushx lpushx linsert lset rpoplpush sadd
# sinter sinterstore sunion sunionstore sdiff sdiffstore zadd zincrby
# zunionstore zinterstore hset hsetnx hmset hincrby incrby decrby
# getset mset msetnx exec sort
#
# Predvolené nastavenie je:
#
# maxmemory-policy noeviction
#MAXMEMORY策略: Keď MAXMEMORY

#到达. Môžete si vybrať z piatich správaní:

#

#volatile LRU-> používa algoritmus LRU na odstránenie kľúčov s expire setmi

#allkeys LRU-> vymažú akýkoľvek kľúč podľa algoritmu LRU

#volatile náhodné – > odstrániť náhodné kľúče s expirovanými sadami

#allkeys náhodné > vymažú náhodné kľúče, ľubovoľné kľúče

#volatile TTL-> Vymažte kľúč s najbližším časom vypršania (Minor TTL)

#noeviction-> vôbec nevyprší, iba vráti chyby zápisovej operácie

#

#注意: Pri ktorejkoľvek z vyššie uvedených stratégií Redis pri zápise vráti chybu

#操作, keď neexistuje vhodný kľúč na vysťahovanie.

#

#在编写之日 tieto príkazy sú: 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 triedenie

#

#默认值为:

#

#maxmemory策略无效
Musíte tiež nastaviť nasledujúce konfigurácie:

Predvolené nastavenie redis je veľmi konzervatívne, teda nie je uložené po prekročení limitu pamäte a politika sa môže zmeniť na algoritmus LRU (najmenej používaný algoritmus v poslednej dobe) – novo uložené informácie nahradia staré informácie.

Revízia:

Rozdiel v perzistencii Redis medzi RDB a AOF
https://www.itsvse.com/thread-9555-1-1.html

Inštalácia Dockeru beží na cache Redis
https://www.itsvse.com/thread-8995-1-1.html

Príklady vysvetľujú, čo sú penetrácia keše v Redise, lavína cache a rozpad cache
https://www.itsvse.com/thread-8968-1-1.html

Redis žolíky na hromadné mazanie kľúčov
https://www.itsvse.com/thread-7957-1-1.html

Návod na inštaláciu Redis 5.0.3 na CentOS 7
https://www.itsvse.com/thread-7201-1-1.html

Nainštalujte rozšírenie redis pod php 5.5.7 pod CentOS
https://www.itsvse.com/thread-7200-1-1.html

Koľko kľúčov môže byť uložených v inštancii Redis a aké sú maximálne kľúče a hodnoty?
https://www.itsvse.com/thread-6848-1-1.html

Otázka redis čínštiny sa nedá správne zobraziť
https://www.itsvse.com/thread-5032-1-1.html

Redis umožňuje vzdialený prístup
https://www.itsvse.com/thread-5011-1-1.html

Windows neúspešne spustí službu Redis, chyba 1067: Proces sa neočakávane ukončí.
https://www.itsvse.com/thread-5010-1-1.html

CentOS nainštaloval Redis 4.0.8
https://www.itsvse.com/thread-4614-1-1.html

Redis nastavuje heslá na vzdialené pripojenie a prístup
https://www.itsvse.com/thread-4101-1-1.html

Redis vyprázdni dátovú cache
https://www.itsvse.com/thread-4027-1-1.html

Konfigurácia perzistencie v Redis a vypnutie perzistencie
https://www.itsvse.com/thread-4012-1-1.html

Rozdiel medzi save a bgsave v redis
https://www.itsvse.com/thread-4010-1-1.html

Redis dve metódy a princípy perzistencie
https://www.itsvse.com/thread-4009-1-1.html

Redis má tri spôsoby, ako začať
https://www.itsvse.com/thread-4008-1-1.html

Redis metóda skrývania príkazových okien
https://www.itsvse.com/thread-2988-1-1.html

Redisov hash hash problém
https://www.itsvse.com/thread-2587-1-1.html

5 vecí, ktoré musíte vedieť pred použitím Redis
https://www.itsvse.com/thread-2580-1-1.html

Redis upravuje predvolené číslo portu a nastavuje prístupové heslo
https://www.itsvse.com/thread-2577-1-1.html

Redis Windows 64-bit na stiahnutie, oficiálna adresa stiahnutia
https://www.itsvse.com/thread-2576-1-1.html

Redis používa písmo Lua na podrobné vysvetlenia
https://www.itsvse.com/thread-9634-1-1.html

Výkonnostný test Redis Benchmark
https://www.itsvse.com/thread-9645-1-1.html

(Koniec)






Predchádzajúci:Hodnotenie NPOI typu dátumu bunky
Budúci:Podrobné vysvetlenie operácie NPOI Excel
 Prenajímateľ| Zverejnené 12. 7. 2023 21:08:55 |
Redisove stratégie eliminácie osem pamätí
https://www.itsvse.com/thread-10626-1-1.html
Vyhlásenie:
Všetok softvér, programovacie materiály alebo články publikované spoločnosťou Code Farmer Network slúžia len na vzdelávacie a výskumné účely; Vyššie uvedený obsah nesmie byť použitý na komerčné alebo nezákonné účely, inak nesú všetky následky používateľmi. Informácie na tejto stránke pochádzajú z internetu a spory o autorské práva s touto stránkou nesúvisia. Musíte úplne vymazať vyššie uvedený obsah zo svojho počítača do 24 hodín od stiahnutia. Ak sa vám program páči, podporte originálny softvér, zakúpte si registráciu a získajte lepšie originálne služby. Ak dôjde k akémukoľvek porušeniu, kontaktujte nás prosím e-mailom.

Mail To:help@itsvse.com