Tento článek je zrcadlovým článkem o strojovém překladu, klikněte zde pro přechod na původní článek.

Pohled: 47166|Odpověď: 1

[Zdroj] Redis MISCONF Redis je nakonfigurován tak, aby ukládal snímky RDB

[Kopírovat odkaz]
Zveřejněno 14. 5. 2021 21:18:50 | | | |
Při použití StackExchange.Redis ke manipulaci s cache redis je chyba následující:

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é řešení, upravit soubor redis.windows.conf,Služba Redis je potřeba znovu spustit, nastaveno následovně:
Pokud nechcete službu Redis restartovat, můžete použít příkaz redis-cli k jejímu nastavení následovně:



Vysvětlení je následující:
# Ve výchozím nastavení Redis přestane přijímat zápisy, pokud jsou povoleny snímky RDB
# (alespoň jeden uložený bod) a poslední uložení na pozadí selhalo.
# To uživatele (těžkým způsobem) upozorní, že data nepřetrvávají
# správně na disku, jinak je pravděpodobné, že si toho nikdo nevšimne a někteří
# Katastrofa nastane.
#
# Pokud proces ukládání pozadí začne znovu fungovat, Redis to udělá
# automaticky povolit zápisy znovu.
#
# Pokud jste však nastavili správné monitorování serveru Redis
# a perzistence, možná budete chtít tuto funkci vypnout, aby Redis mohl
# pokračujte v práci jako obvykle, i když jsou problémy s diskem,
# povolení a tak dále.
Jednoduše řečeno: Redis musí forknout hlavní proces, aby zabránil tomu, že hlavní proces při ukládání dat na pevný disk předstírá smrt, a poté dokončit ukládání dat na pevný disk v procesu forku; pokud hlavní proces spotřebuje 4GB paměti, je potřeba dalších 4GB, když je potřeba podproces forku, v tomto okamžiku paměť není dostatečná, fork selže a pak selže i ukládací pevný disk.

Pro zobrazení redis logů je potřeba nastavit redis.windows.conf následovně:

# Zadejte název log souboru. Také lze použít 'stdout' k vynucení
# Redis pro přihlášení na standardní výstup.
logfile "E:/Redis-x64-3.2.100/redis.txt"

Výjimky z logu jsou následující:

[8984] 14. května 14:05:09.060 * Ukládání na pozadí zahájeno pid 8672
[8672] 14. května 14:05:09.169 #
Windows verze Redis si vychovává paměť haldy ze souboru systémového stránkování
pro sdílení s rozděleným procesem používaným pro perzistenční operace. V tuto chvíli není k dispozici dostatek souvislého volného prostoru v
souborem systémového stránkování. Můžete zvětšit velikost souboru stránkování systému.
Někdy restart defragmentuje systémový stránkovací soubor natolik, že
tato operace byla úspěšně dokončena.

Redis nemůže pokračovat. Odcházím.
[8984] 14. května 14:05:09.278 # operace fork selhala



Po analýze se ukázalo, že problém s maximální velikostí haldy "maxheap" byl způsoben nedostatečnou dostupností paměti.

Řešení

Otevřete konfigurační soubor Reduis "redis.windows.conf" a najděte následující sekci kódu:


# Redis halda musí být větší než hodnota specifikovaná maxmemory
# flag, protože haldový alokátor má své vlastní požadavky na paměť a
# Fragmentace hromady je nevyhnutelná. Pokud je pouze příznak maxmemory
# Specifikováno, maxheap bude nastaven na 1,5*maxmemory. Pokud je vlajka maxheap
# Specifikováno spolu s maxmemory, bude příznak maxheap automaticky
# zvýšeno, pokud je menší než 1,5*maxmemory.
#  
# Maxheap <bytes>

Přidání tohoto nastavení je dobré,Služba Redis se nespustí!!!!!!!
Výchozí hodnota je: maxheap 1024000000≈976,56M

Tento komentář jsem v conf souboru nenašel, našel jsem něco takového:
# Nepoužívejte více paměti než je stanovený počet bajtů.
# Když je dosaženo paměťového limitu, Redis se pokusí odebrat klíče
# podle zvolené politiky vyřazování (viz maxmemory-policy).
#
# Pokud Redis nemůže odebrat klíče podle politiky, nebo pokud je politika
# nastaveno na 'noeviction', Redis začne odpovídat chybami na příkazy
# který by spotřeboval více paměti, jako SET, LPUSH a tak dále, a bude pokračovat
# odpovídat na příkazy pouze pro čtení jako GET.
#
# Tato možnost je obvykle užitečná při použití Redis jako LRU cache nebo při nastavení
# pevný paměťový limit pro instanci (pomocí politiky 'noeviction').
#
# VAROVÁNÍ: Pokud máte slave připojené k instanci s zapnutou maxmemory,
# Velikost výstupních bufferů potřebných k napájení slave se odečítá
# z počtu použitých pamětí, aby síťové problémy / resynchronizace
# nespouštějí smyčku, kde jsou klávesy vyřazeny, a tím pádem výstup
# buffer slave je plný DELů klíčů vyřazených, což spouští smazání
# dalších klíčů a tak dále, dokud není databáze úplně vyprázdněna.
#
# Stručně řečeno... Pokud máte připojené otroky, doporučuje se nastavit spodní část
# limit pro maxmemory, aby byl na systému volný RAM pro slave
# výstupní buffery (ale to není potřeba, pokud je politika 'noeviction').
#
# UPOZORNĚNÍ: nenastavení maxmemory způsobí, že Redis skončí s
# výjimka mimo paměť, pokud je dosažen limit haldy.
#
# POZNÁMKA: protože Redis používá systémový stránkovací soubor k alokaci paměti haldy,
# využití pracovní sady paměti zobrazené ve Windows Task Manageru nebo jiném
# nástroje jako ProcessExplorer nemusí být vždy přesné. Například, správně
# po uložení souborů RDB nebo AOF na pozadí, hodnota pracovní sady
# může výrazně klesnout. Aby se zkontrolovalo správné množství použité paměti
# od redis-serveru pro uložení dat použijte příkaz klienta INFO. The INFO
# Příkaz ukazuje pouze paměť použitou k uložení dat Redis, nikoli extra
# paměti využívané procesem Windows pro své vlastní požadavky. Th3 extra množství
# paměti, která není hlášena příkazem INFO, lze vypočítat odečtením
# Peak Working Set hlášený Správcem úloh Windows a used_memory_peak
# hlášeno příkazem INFO.
#
# maxmemory <bytes>

Varování: Pokud je limit haldy dosažen, nenastavení maxmemory způsobí, že Redis skončí s výjimkou mimo paměť.

Poznámka: KvůliRedis používá systémové stránkovací soubory k alokaci haldové paměťi

Windows Správce úloh nebo jiné nástroje jako ProcessExplorer ne vždy ukazují přesné využití paměti pracovních sad. Jednoduše řečeno,Využití paměti zobrazené Správcem úloh není přesné!!!

Použijte příkaz info k dotazování následovně:

# Paměť
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: Nevyřazení
mem_fragmentation_ratio:1:00
mem_allocator:jemalloc-3.6.0



Prostředí je následující:

1073741824 bajtů = 1G
Po nastavení přidá klient redis .net chybu cache následovně:

Příkaz OOM není povolen při použití paměti > 'maxmemory'.
# MAXMEMORY POLICY: jak Redis vybere, co odstranit, když maxmemory
# je dosaženo. Můžete si vybrat z pěti vzorců chování:
#
# Volatile-LRU -> odstraňte klíč s nastavením expire pomocí algoritmu LRU
# allkeys-lru -> odstraní libovolný klíč podle algoritmu LRU
# Volatile-random -> odstraňte náhodný klíč s nastavením expire
# allkeys-random -> odstraňte náhodný klíč, libovolný klíč
# volatile-ttl -> odstraňte klíč s nejbližším časem vypršení (menší TTL)
# Noeviction -> vůbec nevyprší, stačí vrátit chybu při zápisových operacích
#
# Poznámka: u kterékoli z výše uvedených politik Redis při zápisu vrátí chybu
# operací, když nejsou vhodné klíče pro vystěhování.
#
# V době zápisu jsou tyto pří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
#
# Výchozí nastavení je:
#
# Maxmemory-policy nevyřazení
#MAXMEMORY策略: Když MAXMEMORY

#到达. Můžete si vybrat z pěti chování:

#

#volatile LRU-> používá algoritmus LRU k odstranění klíčů s expirovanými sadami

#allkeys LRU-> smazat libovolný klíč podle algoritmu LRU

#volatile náhodné – > odstranit náhodné klíče s expirovanými sadami

#allkeys náhodné > mazat náhodné klíče, libovolné klíče

#volatile TTL-> Smažte klíč s nejbližším časem vypršení (Minor TTL)

#noeviction-> vůbec nevyprší, pouze vrací chyby při zápisu

#

#注意: Pro jakoukoli z výše uvedených strategií Redis vrací chybu při zápisu

#操作, když neexistuje vhodný klíč k vystěhování.

#

#在编写之日 jsou tyto příkazy: 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 třídění

#

#默认值为:

#

#maxmemory策略无效
Musíte také nastavit následující konfigurace:

Výchozí nastavení redis je velmi konzervativní, to znamená, že se neukládá po překročení paměťového limitu a politika může být změněna na algoritmus LRU (nejméně používaný algoritmus v poslední době) – nově uložené informace nahradí staré informace.

Přezkoumání:

Rozdíl v perzistenci mezi RDB a AOF v Redisu
https://www.itsvse.com/thread-9555-1-1.html

Instalace Dockeru spouští cache Redis
https://www.itsvse.com/thread-8995-1-1.html

Příklady vysvětlují, co jsou pronikání do keše Redis, lavina cache a rozpad cache
https://www.itsvse.com/thread-8968-1-1.html

Redis žolíky pro hromadné mazání klíčů
https://www.itsvse.com/thread-7957-1-1.html

Instalace CentOS 7 Redis 5.0.3 tutoriál
https://www.itsvse.com/thread-7201-1-1.html

Nainstalujte rozšíření redis pod php 5.5.7 pod CentOS
https://www.itsvse.com/thread-7200-1-1.html

Kolik klíčů lze uložit v instanci Redis a jaké jsou maximální klíče a hodnoty?
https://www.itsvse.com/thread-6848-1-1.html

Problém s čínštinou redis nelze správně zobrazit
https://www.itsvse.com/thread-5032-1-1.html

Redis umožňuje vzdálený přístup
https://www.itsvse.com/thread-5011-1-1.html

Windows nedokáže spustit službu Redis, chyba 1067: Proces se neočekávaně ukončí.
https://www.itsvse.com/thread-5010-1-1.html

CentOS nainstaloval Redis 4.0.8
https://www.itsvse.com/thread-4614-1-1.html

Redis nastavuje vzdálená připojení a přístupová hesla
https://www.itsvse.com/thread-4101-1-1.html

Redis vyprázdní datovou cache
https://www.itsvse.com/thread-4027-1-1.html

Konfigurace perzistence v Redis a vypnutí perzistence
https://www.itsvse.com/thread-4012-1-1.html

Rozdíl mezi uloženou hrou a bgsave v redis
https://www.itsvse.com/thread-4010-1-1.html

Redis dvě metody a principy setrvání
https://www.itsvse.com/thread-4009-1-1.html

Redis má tři způsoby, jak začít
https://www.itsvse.com/thread-4008-1-1.html

Metoda Redisu pro skrývání příkazových oken
https://www.itsvse.com/thread-2988-1-1.html

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

5 věcí, které musíte vědět před použitím Redis
https://www.itsvse.com/thread-2580-1-1.html

Redis upravuje výchozí číslo portu a nastavuje přístupové heslo
https://www.itsvse.com/thread-2577-1-1.html

Redis Windows 64-bit download, oficiální adresa ke stažení
https://www.itsvse.com/thread-2576-1-1.html

Redis používá písma Lua pro podrobná vysvětlení
https://www.itsvse.com/thread-9634-1-1.html

Test výkonu v Redisu v benchmarku
https://www.itsvse.com/thread-9645-1-1.html

(Konec)






Předchozí:Hodnocení NPOI typu data buňky
Další:Podrobné vysvětlení operace NPOI Excel
 Pronajímatel| Zveřejněno 12. 7. 2023 21:08:55 |
Strategie eliminace osm Redisové paměti
https://www.itsvse.com/thread-10626-1-1.html
Zřeknutí se:
Veškerý software, programovací materiály nebo články publikované organizací Code Farmer Network slouží pouze k učení a výzkumu; Výše uvedený obsah nesmí být používán pro komerční ani nelegální účely, jinak nesou všechny důsledky uživatelé. Informace na tomto webu pocházejí z internetu a spory o autorská práva s tímto webem nesouvisí. Musíte výše uvedený obsah ze svého počítače zcela smazat do 24 hodin od stažení. Pokud se vám program líbí, podporujte prosím originální software, kupte si registraci a získejte lepší skutečné služby. Pokud dojde k jakémukoli porušení, kontaktujte nás prosím e-mailem.

Mail To:help@itsvse.com