|
|
Veröffentlicht am 14.05.2021, 21:18:50
|
|
|
|

Mit StackExchange.Redis zur Manipulation des Redis-Caches lautet der Fehler wie folgt:
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.
Übergangslösung, die Datei redis.windows.conf modifizieren,Der Redis-Dienst muss wieder aufgenommen werden, setzt sich wie folgt auf:
Wenn Sie den Redis-Dienst nicht neu starten möchten, können Sie den Befehl rediscli verwenden, um ihn wie folgt einzurichten:
Die Erklärung lautet wie folgt:
# Standardmäßig akzeptiert Redis keine Schreibvorgänge mehr, wenn RDB-Snapshots aktiviert sind # (mindestens ein Speicherpunkt) und der letzte Hintergrundspeicher fehlschlug. # Das macht den Nutzer (auf harte Weise) bewusst, dass die Daten nicht gespeichert werden # auf der Disk richtig, sonst wird es wahrscheinlich niemand bemerken und einige # Katastrophen werden geschehen.
# # Wenn der Hintergrundspeicherprozess wieder funktioniert, wird Redis es tun # erlaubt automatisch erneut Schreiben.
# # Wenn du jedoch deine ordnungsgemäße Überwachung des Redis-Servers eingerichtet hast # und Persistenz solltest du diese Funktion deaktivieren, damit Redis es auch tut # arbeite weiter wie gewohnt, auch wenn es Probleme mit der Festplatte gibt, # Erlaubnisse und so weiter. Einfach ausgedrückt: Redis muss einen Hauptprozess forken, um zu verhindern, dass der Hauptprozess beim Speichern der Daten auf der Festplatte den Tod vortäuscht, und dann den Vorgang abschließen, Daten auf der Festplatte im Fork-Prozess zu speichern. Wenn der Hauptprozess 4 GB Speicher verbraucht, werden weitere 4 GB benötigt, wenn der Fork-Unterprozess benötigt wird. Zu diesem Zeitpunkt reicht der Speicher nicht aus, der Fork schlägt fehl und dann fällt auch die datensparende Festplatte aus. Um die Redis-Logs einzusehen, musst du redis.windows.conf wie folgt konfigurieren:
# Gib den Namen der Logdatei an. Außerdem kann 'Stdout' zum Erzwingen verwendet werden. # Redis, um sich auf die Standardausgabe einzuloggen. Logfile "E:/Redis-x64-3.2.100/redis.txt" Die Log-Ausnahmen sind wie folgt:
[8984] 14. Mai 14:05:09.060 * Hintergrundspeicherung gestartet von pid 8672 [8672] 14. Mai 14:05:09.169 # Die Windows-Version von Redis reserviert Heap-Speicher aus der System-Paging-Datei zum Teilen mit dem geforkten Prozess, der für Persistenzoperationen verwendet wird. Zu diesem Zeitpunkt steht in der System-Paging-Datei. Du kannst die Größe der System-Paging-Datei erhöhen. Manchmal defragmentiert ein Neustart die System-Paging-Datei ausreichend für Diese Operation erfolgreich abgeschlossen.
Redis kann nicht weitermachen. Ich gehe raus. [8984] 14. Mai 14:05:09.278 # Gabelvorgang fehlgeschlagen
Nach Analyse stellte sich heraus, dass das Problem mit der maximalen Heap-Größe "Maxheap"-Konfiguration auf unzureichenden verfügbaren Speicher zurückzuführen war.
Lösung
Öffnen Sie die Konfigurationsdatei von Redis "redis.windows.conf" und finden Sie den folgenden Codeabschnitt:
# Der Redis-Heap muss größer sein als der vom Maxmemory angegebene Wert #-Flagge, da der Heap-Allocator eigene Speicheranforderungen hat und # Fragmentierung des Haufens ist unvermeidlich. Wenn nur das maxmemory-Flag # spezifiziert, wird Maxheap auf 1,5*maxmemory gesetzt. Wenn die Maxheap-Flagge lautet # zusammen mit maxmemory angegeben, wird das maxheap-Flag automatisch angegeben # erhöht, wenn er kleiner als 1,5*max-Speicher ist. # # maxheap <bytes> Diese Einstellung hinzuzufügen ist gut,Der Redis-Dienst startet nicht!!!!!!!
Der Standardwert ist: maxheap 10240000000≈976,56M
Ich habe diesen Kommentar nicht in der Conf-Datei gefunden, ich habe etwas wie das hier gefunden:
# Benutze nicht mehr Speicher als die angegebene Anzahl an Bytes. # Wenn das Speicherlimit erreicht ist, wird Redis versuchen, Schlüssel zu entfernen # gemäß der gewählten Räumungspolitik (siehe maxmemory-policy).
# # Wenn Redis die Schlüssel gemäß der Richtlinie nicht entfernen kann, oder wenn die Richtlinie es ist # auf 'Noeviction' gesetzt, beginnt Redis mit Fehlern auf Befehle zu antworten # das mehr Speicher verbrauchen würde, wie SET, LPUSH und so weiter, und wird fortgesetzt #, um auf schreibgeschützte Befehle wie GET zu antworten.
# # Diese Option ist in der Regel nützlich, wenn Redis als LRU-Cache verwendet wird oder zum Setzen # Ein hartes Speicherlimit für eine Instanz (unter Verwendung der 'Noeviction'-Politik).
# # WARNUNG: Wenn du Slaves an eine Instanz mit Maxmemory angeschlossen hast, # Die Größe der Ausgangspuffer, die zur Versorgung der Slaves benötigt werden, wird abgezogen # aus der Anzahl des benötigten Speichers, sodass Netzwerkprobleme / Resynchronisationen es tun # Nicht eine Schleife auslösen, in der die Schlüssel rausgeworfen werden, und im Gegenzug der Ausgang # Puffer der Sklaven ist voll mit DELs der entfernten Schlüssel, was die Löschung auslöst # von weiteren Schlüsseln und so weiter, bis die Datenbank vollständig leer ist.
# # Kurz gesagt... Wenn du Sklaven angehängt hast, wird empfohlen, einen Lower einzustellen # Limit für Maxmemory, sodass auf dem System etwas freier RAM für den Slave vorhanden ist # Ausgabepuffer (aber dies ist nicht nötig, wenn die Richtlinie 'Noeviction' lautet).
# # WARNUNG: Das Nicht Setzen von Maxmemory führt dazu, dass Redis mit einem beendet wird. # Out-of-Memory-Ausnahme, wenn das Heap-Limit erreicht ist.
# # HINWEIS: Da Redis die System-Paging-Datei verwendet, um den Heap-Speicher zuzuweisen, # Der Arbeitsset-Speicherverbrauch, der vom Windows-Task-Manager oder von anderen angezeigt wird # Tools wie ProcessExplorer sind nicht immer genau. Zum Beispiel rechts # Nach einem Hintergrundspeicher der RDB- oder AOF-Dateien wird der Arbeitssetwert # könnte deutlich sinken. Um die korrekte Speichermenge zu überprüfen # vom Redis-Server, um die Daten zu speichern, verwenden Sie den Befehl INFO-Client. Die INFO #-Befehl zeigt nur den Speicher an, mit dem die Redis-Daten gespeichert werden, nicht den zusätzlichen Speicher # Speicher, der vom Windows-Prozess für seine eigenen Anforderungen verwendet wird. Th3 zusätzlicher Betrag # des Speichers, der nicht vom INFO-Befehl gemeldet wird, kann berechnet werden, indem man die # Peak Working Set, gemeldet vom Windows-Task-Manager und dem used_memory_peak # vom INFO-Befehl gemeldet.
# # maxmemory <bytes> Warnung: Wenn das Heap-Limit erreicht wird, führt das Nichtsetzen von Maxmemory dazu, dass Redis mit einer Out-of-Memory-Ausnahme endet.
Hinweis: Aufgrund vonRedis verwendet System-Paging-Dateien, um Heap-Speicher zuzuweisen,
Der Windows-Task-Manager oder andere Tools wie ProcessExplorer zeigen nicht immer eine genaue Nutzung des Arbeitsspeichers an. Einfach ausgedrückt,Der vom Task-Manager angezeigte Speicherverbrauch ist nicht genau!!!
Verwenden Sie den Info-Befehl, um wie folgt abzufragen:
# Erinnerung 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: Keine Räumung mem_fragmentation_ratio:1:00 mem_allocator:jemalloc-3.6.0
Die Einstellungen sind wie folgt:
1073741824 Bytes = 1G Nach der Einstellung fügt der Redis .net-Client einen Cache-Fehler wie folgt hinzu:
OOM-Befehl nicht erlaubt, wenn Speicher > 'maxmemory' verwendet wird. # MAXMEMORY-RICHTLINIE: Wie Redis auswählt, was beim Maxmemory entfernt wird # ist erreicht. Sie können aus fünf Verhaltensweisen wählen:
# # flüchtig-lru -> entferne den Schlüssel mit einer Ablaufmenge mit einem LRU-Algorithmus # allkeys-lru -> beliebigen Schlüssel gemäß dem LRU-Algorithmus entfernen # flüchtig-zufällig -> entferne einen zufälligen Schlüssel mit einem Ablaufsatz # allkeys-random -> entferne einen zufälligen Schlüssel, irgendeinen Schlüssel # flüchtig-ttl -> entferne den Schlüssel mit der nächstgelegenen Ablaufzeit (kleine TTL) # Noeviction -> läuft überhaupt nicht ab, sondern gibt nur einen Fehler bei Schreiboperationen zurück
# # Hinweis: Bei einer der oben genannten Richtlinien gibt Redis beim Schreiben einen Fehler zurück # Operationen, wenn keine geeigneten Schlüssel für die Räumung vorhanden sind.
# # Zum Zeitpunkt des Schreibens sind diese Befehle: setnx setex append # incr decr rpush lpush rpushx lpushx 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
# # Der Standard lautet:
# # maxmemory-policy Noeviction #MAXMEMORY策略: Wenn MAXMEMORY
#到达. Sie können aus fünf Verhaltensweisen wählen:
#
#volatile LRU-> verwendet den LRU-Algorithmus, um Schlüssel mit ablaufenden Mengen zu entfernen
#allkeys löscht LRU-> jeden Schlüssel gemäß dem LRU-Algorithmus
#volatile zufällig – > entferne zufällige Schlüssel mit abgelaufenen Sets
#allkeys zufällige > löschen zufällige Schlüssel, beliebige Schlüssel
#volatile TTL-> Löschen Sie den Schlüssel mit der nächstgelegenen Ablaufzeit (Minor TTL)
#noeviction-> läuft überhaupt nicht ab, sondern gibt nur Schreibfehler zurück
#
#注意: Für jede der oben genannten Strategien gibt Redis beim Schreiben einen Fehler zurück
#操作, wenn kein geeigneter Schlüssel für die Räumung vorhanden ist.
#
#在编写之日 sind diese Befehle: 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 sortierung
#
#默认值为:
#
#maxmemory策略无效 Sie müssen außerdem folgende Konfigurationen einrichten:
Die Standard-Redis-Einstellung ist sehr konservativ, das heißt, sie wird nicht gespeichert, nachdem das Speicherlimit überschritten wurde, und die Richtlinie kann auf den LRU-Algorithmus (den zuletzt am wenigsten verwendeten Algorithmus) geändert werden – die neu gespeicherten Informationen ersetzen die alten.
Rezension:
(Ende)
|
Vorhergehend:NPOI-Beurteilung des ZelldatentypsNächster:NPOI Operation Excel Detaillierte Erklärung
|