Redis
 sql >> Baza danych >  >> NoSQL >> Redis

redis bgsave nie powiodło się, ponieważ fork nie może przydzielić pamięci

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.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Porównanie podpisanej liczby 64-bitowej przy użyciu 32-bitowych operacji bitowych w Lua

  2. Łączenie z Redis działającym w kontenerze Docker z komputera hosta

  3. moje klucze redis nie wygasają

  4. StackExchange.Redis ConnectionMultiplexer pula dla metod synchronicznych

  5. Udostępnianie gniazd w oddzielnych instancjach nodeJS