Heim  >  Artikel  >  Datenbank  >  So beheben Sie den overcommit_memory-Fehler in der Redis-Datenbank unter Linux

So beheben Sie den overcommit_memory-Fehler in der Redis-Datenbank unter Linux

WBOY
WBOYnach vorne
2023-05-27 20:55:532654Durchsuche

Hintergrund

Das Redis des Unternehmens schlägt manchmal beim Speichern der Datenbank im Hintergrund fehl. Der folgende Alarm wird im Protokoll gefunden, der wahrscheinlich dadurch verursacht wird:

[13223] 17. März 13:18:02.207 # WARNUNG overcommit_memory ist auf 0 gesetzt! Das Speichern im Hintergrund kann bei geringem Arbeitsspeicher fehlschlagen. Um dieses Problem zu beheben, fügen Sie „vm.overcommit_memory = 1“ zu /etc/sysctl.conf hinzu und starten Sie dann neu oder führen Sie den Befehl „sysctl vm.overcommit_memory=1“ aus, damit dies wirksam wird.

Nachdem ich gesucht habe, habe ich herausgefunden, dass einige Leute auf das gleiche Problem gestoßen sind wie ich, und es wird grundsätzlich festgestellt, dass es dadurch verursacht wird.

Kernel-Parameter overcommit_memory

Es ist 内存分配策略

Optionale Werte: 0, 1, 2.

  • 0 bedeutet, dass der Kernel prüft, ob genügend Speicher für die Verwendung durch den Anwendungsprozess vorhanden ist. Wenn genügend Speicher vorhanden ist, schlägt die Speicheranwendung fehl und es wird ein Fehler zurückgegeben Bewerbungsprozess.

  • 1 gibt an, dass der Kernel die Zuweisung des gesamten physischen Speichers unabhängig vom aktuellen Speicherstatus zulässt.

  • 2, was darauf hinweist, dass der Kernel Speicher zuweisen darf, der die Summe des gesamten physischen Speichers und Auslagerungsspeichers übersteigt kann mehr größere Programme ausführen. Denn nach der Speicherbeantragung wird der Speicher nicht sofort genutzt. Diese Technik wird Overcommit genannt. Wenn Linux erkennt, dass nicht genügend Speicher vorhanden ist, löst es den OOM-Killer aus (OOM steht für „Insuffizienter Speicher“). Um Speicher freizugeben, wird dem Beenden einiger Benutzermodusprozesse Vorrang vor dem Beenden von Kernel-Threads eingeräumt.

  • Welche Prozesse wird Linux töten, wenn Oom-Killer auftritt? Die Funktion, die den Prozess auswählt, ist die Funktion oom_badness (in mm/oom_kill.c), die die Anzahl der Punkte (0 ~ 1000) für jeden Prozess berechnet. Je höher die Punktzahl, desto wahrscheinlicher ist es, dass der Prozess abgebrochen wird. Die Anzahl der Punkte pro Prozess hängt von oom_score_adj ab, und oom_score_adj kann festgelegt werden (-1000 ist der niedrigste Wert, 1000 der höchste Wert).

Lösung:

Es ist ganz einfach, folgen Sie einfach den Anweisungen (setzen Sie vm.overcommit_memory auf 1):

Es gibt drei Möglichkeiten, die Kernel-Parameter zu ändern, aber Sie benötigen Root-Berechtigungen:

(1) Bearbeiten/ etc/sysctl.conf, ändern Sie vm.overcommit_memory=1 und dann sysctl -p, damit die Konfigurationsdatei wirksam wird

    (2) sysctl vm.overcommit_memory=1
  • (3) echo 1 > proc/sys/ vm/overcommit_memory

Das obige ist der detaillierte Inhalt vonSo beheben Sie den overcommit_memory-Fehler in der Redis-Datenbank unter Linux. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen