Genauer gesagt aus den Redis-FAQ
Das Schema zum Speichern im Hintergrund von Redis basiert auf der Copy-on-Write-Semantik von Fork in modernen Betriebssystemen:Redis verzweigt (erstellt einen untergeordneten Prozess), der eine exakte Kopie des übergeordneten Prozesses ist. Der untergeordnete Prozess sichert die DB auf der Festplatte und wird schließlich beendet. Theoretisch sollte der untergeordnete Prozess so viel Speicher verwenden wie der übergeordnete Prozess, da er eine Kopie ist, aber tatsächlich teilen sich der übergeordnete und der untergeordnete Prozess dank der Copy-on-Write-Semantik, die von den meisten modernen Betriebssystemen implementiert wird, die gemeinsamen Speicherseiten. Eine Seite wird nur dann dupliziert, wenn sie sich im untergeordneten oder im übergeordneten Element ändert. Da sich theoretisch alle Seiten ändern können, während der untergeordnete Prozess speichert, kann Linux nicht im Voraus sagen, wie viel Speicher der untergeordnete Prozess benötigt erforderlich, um wirklich alle übergeordneten Speicherseiten zu duplizieren, mit dem Ergebnis, dass es fehlschlägt, wenn Sie einen Redis-Datensatz von 3 GB und nur 2 GB freien Speicher haben.
Das Setzen von overcommit_memory auf 1 sagt Linux, dass es sich entspannen und den Fork in einer optimistischeren Zuweisungsart ausführen soll, und das ist in der Tat das, was Sie für Redis wollen.
Redis benötigt nicht so viel Speicher, wie das Betriebssystem denkt, um auf die Festplatte zu schreiben, daher kann der Fork präventiv fehlschlagen.