Dokładniej, z często zadawanych pytań dotyczących Redis
Schemat zapisywania w tle Redis opiera się na semantyce „kopiuj przy zapisie” w nowoczesnych systemach operacyjnych:widełki Redis (tworzy proces podrzędny), który jest dokładną kopią procesu nadrzędnego. Proces potomny zrzuca bazę danych na dysk i ostatecznie kończy działanie. Teoretycznie dziecko powinno używać tyle pamięci, ile rodzic jest kopią, ale w rzeczywistości dzięki semantyce kopiowania przy zapisie zaimplementowanej przez większość nowoczesnych systemów operacyjnych proces nadrzędny i potomny będą współdzielić wspólne strony pamięci. Strona zostanie zduplikowana tylko wtedy, gdy zmieni się w dziecku lub rodzicu. Ponieważ teoretycznie wszystkie strony mogą się zmieniać podczas zapisywania procesu potomnego, Linux nie może z góry określić, ile pamięci zajmie dziecko, więc jeśli ustawienie overcommit_memory jest ustawione na zero fork nie powiedzie się, chyba że będzie tyle wolnej pamięci RAM, ile wynosi wymagane do prawdziwego zduplikowania wszystkich nadrzędnych stron pamięci, w wyniku czego jeśli masz zestaw danych Redis o pojemności 3 GB i tylko 2 GB wolnej pamięci, zakończy się niepowodzeniem.
Ustawienie overcommit_memory na 1 oznacza, że Linux zrelaksuje się i wykona rozwidlenie w bardziej optymistycznym stylu alokacji, a tego właśnie chcesz dla Redis.
Redis nie potrzebuje tyle pamięci, ile system operacyjny myśli, aby zapisywać na dysku, więc może zapobiegawczo zawieść rozwidlenie.