Heim  >  Artikel  >  Datenbank  >  Detaillierte Erläuterung der Ursachen der Redis-Blockierung

Detaillierte Erläuterung der Ursachen der Redis-Blockierung

尚
nach vorne
2019-11-29 15:56:302968Durchsuche

Detaillierte Erläuterung der Ursachen der Redis-Blockierung

Blockade wurde gefunden

Der Online-Bewerbungsdienst erkennt dies als erster und kann abnormale Statistiken auf der Anwendungsseite hinzufügen und eine Warnung ausgeben E-Mail, SMS und WeChat.

Verwenden Sie das Protokollsystem, um Ausnahmen zu zählen und Alarmlogik auszulösen.

Verwenden Sie das Redis-Überwachungssystem, um Blockierungsprobleme zu erkennen und Alarme auszulösen. Das CacheCloud-System wird empfohlen.

Intrinsische Gründe

Unangemessene Verwendung von API oder Datenstrukturen

Vermeiden Sie bei Szenarien mit hoher Parallelität die Ausführung von Befehlen für große Objekte deren Algorithmuskomplexität O(n)O(n) übersteigt.

Langsame Abfrage gefunden: slowlog get {n}

Großes Objekt gefunden: redis-cli -h{ip} -p{port} bigkeys

CPU ausgelastet

CPU-Sättigung bezieht sich auf Redis, bei dem die Single-Core-CPU zu 100 % ausgeführt wird.

Der obere Befehl überprüft die CPU-Auslastung des Redis-Prozesses

redis-cli -h{ip} -p{port} –stat ruft die aktuelle Redis-Auslastung ab und bestimmt, ob die Parallelität erreicht ist das Limit

Info CommandStats Analysis-Befehl verbraucht unangemessene Zeit und kann zu übermäßiger Speicheroptimierung führen

Persistenzblockierung

1. Fork-Blockierung

tritt in RDB auf oder Wenn AOF neu geschrieben wird, ruft der Redis-Hauptthread fork auf, um einen untergeordneten Prozess zu generieren, um das dauerhafte Umschreiben der Datei abzuschließen

Verwenden Sie den Befehl info stats, um den Indikator lastest_fork_usec abzurufen, der angibt, dass der neueste Fork vorliegt Der Vorgang von Redis hat einige Zeit gedauert

2. AOF-Flash-Disk-Blockierung

Aktivieren Sie das Leeren von Dateien normalerweise einmal pro Sekunde. Wenn der Festplattendruck zu hoch ist, muss fsync auf den Schreibvorgang warten zum Abschließen

Überprüfen Sie den aof_delayed_fsync-Indikator im Redis-Protokoll oder in der Informationspersistenzstatistik

Wenn Sie iotop verwenden können, verbraucht dieser Prozess möglicherweise zu viele Festplattenressourcen

3 Schreibvorgang ist blockiert

Bei Betriebssystemen, die Transparent HugePages aktivieren, verursacht jeder Schreibbefehl das Kopieren der Speicherseiteneinheit von 4 KB auf 2 MB

verlangsamt die Ausführungszeit von Schreibvorgängen, was zu a führt große Anzahl langsamer Abfragen für Schreibvorgänge

externe Gründe

CPU-Konkurrenz

1. Prozesswettbewerb: Redis ist eine typische CPU-intensive Anwendung. Verwenden Sie die Befehle top und sar, um den Zeitpunkt und den Prozess des CPU-Verbrauchs zu ermitteln.

2. Binden Sie die CPU: Eine häufige Optimierung besteht darin, den Redis-Prozess an die CPU zu binden, wodurch der CPU-Kontextwechselaufwand reduziert wird Der untergeordnete Fork-Prozess ist abgeschlossen. Wenn die CPU gebunden ist, kommt es zu einem starken CPU-Wettbewerb zwischen dem übergeordneten und dem untergeordneten Prozess, was sich stark auf die Stabilität von Redis auswirkt.

Speicheraustausch

Wenn das Betriebssystem den von Redis verwendeten Speicher auf die Festplatte auslagert, sinkt die Leistung von Redis nach dem Austausch stark.

Prüfmethode zur Identifizierung des Redis-Speicheraustauschs:

1. Fragen Sie die Redis-Prozessnummer ab

redis-cli info server | grep process_id

2. Fragen Sie die Speicheraustauschinformationen basierend auf der Prozessnummer ab

cat /proc/{process_id}/smaps | grep Swap

Wenn das Austauschvolumen in einigen Fällen 0 KB oder 4 KB beträgt, ist das normal.

Speicheraustausch verhindern:

1. Stellen Sie sicher, dass der Computer über ausreichend verfügbaren Speicher verfügt.

2. Stellen Sie sicher, dass alle Redis-Beispiele den maximal verfügbaren Speicher (maxmemory) festlegen, um Redis zu verhindern Speicher unter extremen Umständen Unkontrollierbares Wachstum

3. Reduzieren Sie die Priorität des vom System verwendeten Swaps, z. B. echo 10>/proc/sys/vm/swappiness

Netzwerkprobleme

1. Verbindung abgelehnt

Netzwerkunterbrechung: Wird normalerweise durch Netzwerkumschaltung oder Bandbreitenerschöpfung verursacht

Redis-Verbindung abgelehnt:

Neue Verbindungen ablehnen, wenn die Nummer erreicht ist Anzahl der Verbindungen ist größer als maxclients Verbindungseintrag, der Rejected_Connections-Indikator für Informationsstatistiken

Clients greifen auf Redis zu, indem sie so oft wie möglich lange NIO-Verbindungen oder Verbindungspools verwenden

Redis wird in Szenarien verwendet, in denen eine große Anzahl von Verbindungen verwendet wird Auf die Anzahl der verteilten Knoten wird zugegriffen und der Lebenszyklus ist kurz (z. B. Map/Reduce). Es wird empfohlen, die Parameter tcp-keepalive und timeout festzulegen, damit Redis ungültige Verbindungen aktiv prüfen und schließen kann

Verbindungsüberlauf :

Prozesslimit: Die maximale Anzahl von Dateien, die ein Prozess öffnen kann, wird von ulimit -n gesteuert, normalerweise 1024. Redis mit einer großen Anzahl von Verbindungen muss diesen Wert erhöhen

Rückstandswarteschlange Überlauf: Das System verwendet die Backlog-Warteschlange, um TCP-Verbindungen an bestimmten Ports zu speichern, Redis ist standardmäßig 511, System-Backlog ist standardmäßig 128 und Cron kann online verwendet werden. Führen Sie regelmäßig netstat -s | aus. Netzwerkverzögerung

Messen Sie die Netzwerkverzögerung zwischen Maschinen

redis-cli -h{ip} -p{port} –latency
redis-cli -h{ip} -p{port} –latency-history 默认15秒完成一行统计,-i控制采样时间
redis-cli -h{ip} -p{port} –latency-dist 统计图展示,每1秒采样一次

3. Netzwerkkarten-Soft-Interrupt

Einzelne Netzwerkkartenwarteschlange kann nur eine CPU verwenden Dateninteraktionen konzentrieren sich auf dieselbe CPU, was dazu führt, dass Mehrkern-CPUs nicht vollständig ausgenutzt werden können.

Erscheint im Allgemeinen in Szenarien mit hohem Netzwerkverkehrsdurchsatz

Weitere Redis-Kenntnisse finden Sie in der Spalte

Redis-Einführungs-Tutorial

.

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Ursachen der Redis-Blockierung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:csdn.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen
Vorheriger Artikel:Wo ist das Redis-Protokoll?Nächster Artikel:Wo ist das Redis-Protokoll?