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-TutorialDas 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!