Einige Linux-Systeme werden sehr langsam, wenn Redis einen großen Datensatz lädt

14

Ich habe einen Bericht von einem Redis-Benutzer erhalten und bin mir nicht sicher, was ich antworten soll, da ich kein Experte auf dem Gebiet von Linux und dessen Scheduler bin. Wir (als Redis-Projekt) müssen diese Art von Problemen jedoch besonders herausfinden In Zukunft werden wie bei Redis Cluster viele Redis-Instanzen gleichzeitig in einer einzigen Box ausgeführt. Also bitte ich hier um Hilfe.

Problem:

  • Kernel: "Linux redis1 2.6.32-305-ec2 # 9-Ubuntu SMP Do 15. April 08:05:38 UTC 2010 x86_64 GNU / Linux"
  • Viel freier Arbeitsspeicher, keine anderen Prozesse, die signifikante E / A-Vorgänge ausführen.
  • Wichtig , läuft auf einer großen EC2-Instanz, nicht auf einem echten Server. Ich habe so etwas noch nie in einer nicht virtualisierten Umgebung gesehen. Die EC2-Instanz lautete: "17,1 GB Arbeitsspeicher mit hohem Arbeitsspeicher, 6,5 ECU (2 virtuelle Kerne mit jeweils 3,25 EC2-Recheneinheiten), 420 GB lokaler Instanzspeicher, 64-Bit-Plattform" .

Grundsätzlich wird das System nach dem Neustart einer großen Redis-Instanz so langsam, dass Sie nicht mehr auf der Shell tippen können. Wenn Redis eine Instanz lädt, verwendet es 100% der CPU (es lädt Daten so schnell wie möglich) und liest die dump.rdb-Datei nacheinander. Die E / A ist nicht besonders hoch, da das Laden an die CPU gebunden ist, nicht an die E / A.

Warum auf der Erde sollte eine Box mit zwei CPUs und viel RAM, keine vertauschten Dinge auf der Festplatte, grundsätzlich aufhören, mit dieser Arbeitslast zu arbeiten?

Ich habe den Eindruck, dass dies viel mit der Tatsache zu tun hat, dass es sich um eine EC2-Instanz handelt, die mit der verwendeten Virtualisierungstechnologie zusammenhängt, da ich jederzeit problemlos Redis- Datensätze mit 24 GB in meine Box lade (auch mit anderen Instanzen von Redis) Laufen mit hoher Last).

Danke für jeden Hinweis!

Salvatore

Bearbeiten : Hinzufügen von Feedback, das ich von Twitter erhalten habe:

von @ezmobius: @antirez Versuchen Sie es zuerst mit / mnt oder den lokalen kurzlebigen Laufwerken, um festzustellen, ob die EBS-Schwäche vorliegt. 2. Stellen Sie sicher, dass es nicht die "erste Schreibstrafe" ist (googeln), und wenn ja, dann Sie müssen zuerst Nullen über die Festplatte schreiben.

von @dvirsky: @antirez Ich führe viele Redis-Instanzen auf genau solchen ec2-Knoten aus. Ich habe eine gewisse Verlangsamung bei bgsave bemerkt, aber nicht dieses Phänomen.

antirez
quelle

Antworten:

4

Die Ausgabe von 'top' kann einige Hinweise liefern. Oben links befindet sich ein Feld mit der Bezeichnung "% gestohlen", das die Menge der Hardware-CPU angibt, die auf andere Gäste in derselben physischen Box umgeleitet wird. Ich habe diese Art von Verlangsamungen festgestellt, als der Hypervisor beschließt, einem anderen Gast mehr CPU zuzuweisen, insbesondere, wenn ich eine lang andauernde CPU-intensive Aufgabe durchführe.

Ich bin mir nicht sicher, ob das dein Problem ist oder nicht, aber es lohnt sich, es zu überprüfen.

Kevin Smith
quelle
Danke Kevin, das ist sehr interessant und ich war mir dessen überhaupt nicht bewusst.
Antirez
2

Ich hatte das gleiche Problem bei einer EC2-Instanz. Es hat wahrscheinlich nichts mit Redis zu tun - es tritt auf, wenn ein hohes E / A-Problem vorliegt (z. B. wenn Redis eine Dump-Datei lädt).

Schauen Sie sich diesen Thread in den Amazon-Foren an: https://forums.aws.amazon.com/thread.jspa?messageID=215406

Ich habe mit verschiedenen Kerneln / Images experimentiert und jetzt läuft es einwandfrei (auf einem alten 2.6.21-Kernel).

Marek
quelle
Danke mhdk, ich vermute auch, dass dies mit Virtualisierung + Linux Scheduler zusammenhängt. Selbst bei langsamen Datenträger-E / A kann ich keinen Grund erkennen, warum andere Prozesse blockieren würden, wenn sie den Datenträger nicht verwenden und keine ausgelagerten Seiten haben. Es lohnt sich wahrscheinlich, verschiedene Kernel- / Scheduler-Konfigurationen auszuprobieren.
Antirez
2

Sie sollten den CPU-Diebstahl ( xx.x%stauf der rechten Seite der CPU-Zeile) überprüfen, der angezeigt wird, topwenn die 100% -Last und die eingefrorene Shell auftreten. Diebstahl gibt an, wie viel Ihrer tatsächlichen CPU-Zyklen von einem Hypervisor von Ihrem Computer gestohlen und an einen anderen Computer weitergegeben wurden. CPU-Diebstahl ist nur in virtualisierten Umgebungen relevant. Ich hatte genau das Problem mit Mikro-Instanzen, was dazu führte, dass meine Instanz bei rechenintensiven Aufgaben ungefähr eine Stunde lang (bis meine Aufgabe erledigt war) unbrauchbar wurde.

Weitere Informationen zu diesem Thema finden Sie in diesem Beitrag zu Greg's Ramblings . Wenn Sie Gregs Wort nehmen, sollte dies jedoch nur auf Mikroinstanzen geschehen.

Shinnok
quelle