Empfohlenes Lernen: Redis-Video-Tutorial
Ideen zur Fehlerbehebung
Wenn Ihre Redis-Instanz eine Speicherobergrenze von maxmemory hat, kann dies ebenfalls dazu führen Redis soll langsamer werden.
Wenn wir Redis als reinen Cache verwenden, legen wir normalerweise ein Speicherlimit maxmemory für diese Instanz fest und legen dann eine Dateneliminierungsstrategie fest. Wenn der Speicher der Instanz den maximalen Speicher erreicht, stellen Sie möglicherweise fest, dass sich die Vorgangsverzögerung jedes Mal erhöht, wenn Sie danach neue Daten schreiben.
Ursache der Verlangsamung
Wenn der Redis-Speicher den maximalen Speicher erreicht, muss Redis vor jedem Schreiben neuer Daten zunächst einen Teil der Daten aus der Instanz entfernen, um den Speicher der gesamten Instanz unter dem maximalen Speicher zu halten, und erst dann können neue Daten eingeschrieben werden.
Diese Logik des Herauswerfens alter Daten braucht ebenfalls Zeit, und die konkrete Zeitdauer hängt von der von Ihnen konfigurierten Eliminierungsstrategie ab:
Die Eliminierungsstrategie wurde auf zufällige Eliminierung geändert, was viel schneller ist als LRU (abhängig von der Geschäftssituation).
Teilen Sie die Instanz auf und eliminieren Sie die Schlüssel Der Druck wird auf mehrere Instanzen verteiltAb 2.6.38 unterstützt der Linux-Kernel den Memory Huge Page-Mechanismus, der es Anwendungen ermöglicht, Speicher vom Betriebssystem in Einheiten von 2 MB zu beantragen.
Die Speichereinheit, die die Anwendung beim Betriebssystem anwendet, wird jedes Mal größer, aber das bedeutet auch, dass die Zeit, die für die Beantragung des Speichers benötigt wird, länger wird.Lösung
Schalten Sie den riesigen Seitenmechanismus aus.
Zuerst müssen Sie prüfen, ob auf der Redis-Maschine große Seiten aktiviert sind:
$ cat /sys/kernel/mm/transparent_hugepage/enabled [always] madvise never
Wenn die Ausgabeoption immer lautet, bedeutet dies, dass der Mechanismus für große Seiten derzeit aktiviert ist und wir ihn deaktivieren müssen:
$ echo never > /sys/kernel/mm/transparent_hugepage/enabled
In Tatsächlich bietet das Betriebssystem den Vorteil des Speicher-Riesenseitenmechanismus, da er die Häufigkeit reduzieren kann, mit der Anwendungen in bestimmten Programmen Speicher beantragen.
Aber für eine Datenbank wie Redis, die äußerst empfindlich auf Leistung und Latenz reagiert, hoffen wir, dass Redis bei jeder Speicheranforderung so kurz wie möglich benötigt. Daher empfehle ich nicht, diesen Mechanismus auf der Redis-Maschine zu aktivieren .
Ideen zur Fehlerbehebung
Wenn Sie feststellen, dass Redis plötzlich sehr langsam wird und jeder Vorgang Hunderte von Millisekunden oder sogar Sekunden dauert, müssen Sie prüfen, ob Redis Swap verwendet wird, und zwar in diesem Fall In diesem Fall ist Redis grundsätzlich nicht in der Lage, leistungsstarke Dienste bereitzustellen.
Ursachen der Verlangsamung
Was ist Swap? Warum führt die Verwendung von Swap zu einer Verschlechterung der Redis-Leistung?
Wenn Sie etwas über das Betriebssystem wissen, wissen Sie, dass das Betriebssystem zulässt, dass ein Teil der Daten im Speicher auf die Festplatte verschoben wird, um die Speichernutzung zu puffern, um die Auswirkungen von unzureichendem Speicher auf Anwendungen zu mildern Der Bereich, der auf die Festplatte ausgelagert wird, ist Swap.
Das Problem besteht darin, dass Redis, wenn die Daten im Speicher auf die Festplatte verschoben werden, sie erneut von der Festplatte lesen muss. Die Geschwindigkeit des Zugriffs auf die Festplatte ist hunderte Male langsamer als die des Speicherzugriffs! Insbesondere für eine Datenbank wie Redis, die extrem hohe Leistungsanforderungen hat und äußerst leistungsempfindlich ist, ist diese Betriebsverzögerung inakzeptabel.
Zu diesem Zeitpunkt müssen Sie die Speichernutzung der Redis-Maschine überprüfen, um zu bestätigen, ob Swap verwendet wird. Sie können folgendermaßen überprüfen, ob der Redis-Prozess Swap verwendet:
# 先找到 Redis 的进程 ID $ ps -aux | grep redis-server # 查看 Redis Swap 使用情况 $ cat /proc/$pid/smaps | egrep '^(Swap|Size)'
Die Ausgabeergebnisse lauten wie folgt
Größe: 1256 kB
Dieses Ergebnis listet die Speichernutzung des Redis-Prozesses auf.
Austauschen: 0 kB
Größe: 4 kB
Austauschen: 0k B
Größe: 132 kB
Austauschen: 0 kB
Größe: 63488 kB
Austauschen: 0 kB
Größe: 132 kB
Austauschen: 0 kB
Größe: 65404 kB
Swap:
...
Jede Zeile von Size stellt die Größe eines von Redis verwendeten Speichers dar. Die Swap-Größe unten stellt die Größe dieses Speichers dar und wie viele Daten auf die Festplatte ausgelagert wurden. Dies bedeutet, dass die Daten in diesem Speicher vollständig auf die Festplatte übertragen wurden.
Wenn beispielsweise nur eine kleine Datenmenge auf die Festplatte ausgelagert wird und jeder Swap einen kleinen Teil der entsprechenden Größe einnimmt, sind die Auswirkungen nicht sehr groß. Wenn Hunderte von Megabyte oder sogar GB Speicher auf die Festplatte ausgelagert werden, müssen Sie wachsam sein. In diesem Fall wird die Leistung von Redis definitiv stark sinken.
LösungErhöhen Sie den Speicher der Maschine, damit Redis über genügend Speicher verfügt.
Es ist ersichtlich, dass die Leistung von Redis zu diesem Zeitpunkt bei Verwendung von Swap durch Redis im Grunde nicht den hohen Leistungsanforderungen gerecht werden kann (Sie können verstehen, dass die Kampfkunst abgeschafft wurde), sodass Sie diese Situation auch im Voraus verhindern müssen.
Um dies zu verhindern, müssen Sie die Speicher- und Swap-Nutzung der Redis-Maschine überwachen, einen Alarm auslösen, wenn der Speicher nicht ausreicht oder Swap verwendet wird, und dies rechtzeitig beheben.
Ursache 4: Netzwerkbandbreitenüberlastung
Ideen zur FehlerbehebungWenn Sie die oben genannten Szenarien, die zu Leistungsproblemen führen, vermieden haben und Redis lange Zeit stabil läuft, aber nach einem bestimmten Zeitpunkt der Betrieb von Redis begann plötzlich langsamer zu werden und wird immer langsamer. Was ist der Grund dafür?
Zu diesem Zeitpunkt müssen Sie prüfen, ob die Netzwerkbandbreite der Redis-Maschine überlastet ist und ob eine Instanz vorhanden ist, die die Netzwerkbandbreite der gesamten Maschine ausfüllt.
Gründe für eine VerlangsamungWenn die Netzwerkbandbreite überlastet ist, kommt es auf dem Server zu Paketversandverzögerungen, Paketverlusten usw. auf der TCP- und Netzwerkebene.
Die hohe Leistung von Redis liegt neben dem Betriebsspeicher auch in der Netzwerk-E/A. Wenn es einen Engpass bei der Netzwerk-E/A gibt, wird dies auch die Leistung von Redis erheblich beeinträchtigen.
LösungBestätigen Sie rechtzeitig, dass die Redis-Instanz die gesamte Netzwerkbandbreite belegt hat. Wenn es sich um einen normalen Geschäftszugriff handelt, müssen Sie die Instanz rechtzeitig erweitern oder migrieren, um zu vermeiden, dass andere Instanzen dieser Maschine durch Überlastung beeinträchtigt werden Datenverkehr dieser Instanz.
Ihre Geschäftsanwendung sollte lange Verbindungen verwenden, um Redis zu betreiben, um häufige kurze Verbindungen zu vermeiden.
Häufige kurze Verbindungen führen dazu, dass Redis viel Zeit damit verbringt, Verbindungen herzustellen und freizugeben. Der Drei-Wege-Handshake und die Vier-Wege-Welle von TCP erhöhen auch die Zugriffsverzögerungen.
2) Betriebs- und WartungsüberwachungIch habe bereits erwähnt, dass es wichtig ist, bei der Überwachung gute Arbeit zu leisten, wenn man die Verlangsamung von Redis im Voraus vorhersagen möchte.
Überwachung ist eigentlich die Sammlung verschiedener Laufzeitindikatoren von Redis. Der übliche Ansatz besteht darin, dass das Überwachungsprogramm regelmäßig die INFO-Informationen von Redis sammelt und dann eine Datenanzeige und einen Alarm basierend auf den Statusdaten in den INFO-Informationen durchführt.
Was ich Sie hier daran erinnern muss, ist, dass Sie es nicht auf die leichte Schulter nehmen dürfen, einige Überwachungsskripte zu schreiben oder Open-Source-Überwachungskomponenten zu verwenden.
Versuchen Sie beim Schreiben von Überwachungsskripten für den Zugriff auf Redis, lange Verbindungen zum Sammeln von Statusinformationen zu verwenden, um häufige kurze Verbindungen zu vermeiden. Gleichzeitig müssen Sie auch darauf achten, die Häufigkeit des Zugriffs auf Redis zu kontrollieren, um geschäftliche Anfragen nicht zu beeinträchtigen.
Bei der Verwendung einiger Open-Source-Überwachungskomponenten ist es am besten, die Implementierungsprinzipien dieser Komponenten zu verstehen und diese Komponenten richtig zu konfigurieren, um Fehler in den Überwachungskomponenten zu vermeiden, die in kurzer Zeit zu einer großen Anzahl von Redis-Vorgängen führen und Auswirkungen haben die Leistung von Redis.
Damals passierte es uns, dass bei der Verwendung einiger Open-Source-Komponenten durch den DBA aufgrund von Konfigurations- und Nutzungsproblemen das Überwachungsprogramm häufig eingerichtet und wieder von Redis getrennt wurde, was dazu führte, dass Redis langsam reagierte.
3) Andere Programme konkurrieren um Ressourcen
Abschließend muss ich Sie daran erinnern, dass Ihre Redis-Maschine am besten für die Bereitstellung von Redis-Instanzen geeignet ist. Versuchen Sie, Redis eine relativ ruhige Umgebung bereitzustellen . ”-Umgebung, um zu verhindern, dass andere Programme CPU-, Speicher- und Festplattenressourcen belegen, was dazu führt, dass Redis nicht genügend Ressourcen zugewiesen werden.
Empfohlenes Lernen: Redis-Video-Tutorial
Das obige ist der detaillierte Inhalt vonEine kurze Diskussion über die Gründe, warum Redis langsam ist, und wie man das Problem beheben kann. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!