sql >> Databasteknik >  >> NoSQL >> Redis

redis bgsave misslyckades eftersom gaffeln inte kan allokera minne

Mer specifikt från Redis FAQ

Redis bakgrundssparschema förlitar sig på copy-on-write-semantiken för gaffel i moderna operativsystem:Redis forks (skapar en underordnad process) som är en exakt kopia av föräldern. Den underordnade processen dumpar DB:n på disken och avslutas till slut. I teorin bör barnet använda lika mycket minne som föräldern som är en kopia, men tack vare kopiera-på-skriv-semantiken som implementeras av de flesta moderna operativsystem kommer förälder- och barnprocessen att dela de gemensamma minnessidorna. En sida dupliceras endast när den ändras i barnet eller föräldern. Eftersom i teorin alla sidor kan ändras medan den underordnade processen sparas, kan Linux inte säga i förväg hur mycket minne barnet kommer att ta, så om inställningen overcommit_memory är inställd på noll kommer gaffeln att misslyckas om det inte finns så mycket ledigt RAM som krävs för att verkligen duplicera alla överordnade minnessidor, med resultatet att om du har en Redis-datauppsättning på 3 GB och bara 2 GB ledigt minne kommer det att misslyckas.

Att sätta overcommit_memory till 1 säger att Linux ska slappna av och utföra gaffeln på ett mer optimistiskt sätt för allokering, och det är verkligen vad du vill ha för Redis.

Redis behöver inte så mycket minne som operativsystemet tror att det gör för att skriva till disk, så kan förebyggande misslyckas med gaffeln.



  1. Heroku-appen kraschar efter att MongoDB uppdaterats till 3.0

  2. $projekt i $lookup mongodb

  3. MongoDB begränsa lagringsstorleken?

  4. Realtidsdataströmning med MongoDB Change Streams