sql >> Database >  >> NoSQL >> Redis

redis bgsave is mislukt omdat vork geen geheugen kan toewijzen

Meer specifiek, uit de Redis FAQ

Redis-achtergrondbesparingsschema is gebaseerd op de copy-on-write-semantiek van fork in moderne besturingssystemen:Redis-vorken (creëert een onderliggend proces) dat een exacte kopie is van het bovenliggende proces. Het onderliggende proces dumpt de DB op schijf en wordt uiteindelijk afgesloten. In theorie zou het kind net zoveel geheugen moeten gebruiken als de ouder die een kopie is, maar dankzij de copy-on-write-semantiek die door de meeste moderne besturingssystemen wordt geïmplementeerd, zullen het ouder- en kindproces de gemeenschappelijke geheugenpagina's delen. Een pagina wordt alleen gedupliceerd wanneer deze verandert in het kind of in de ouder. Aangezien in theorie alle pagina's kunnen veranderen terwijl het onderliggende proces aan het opslaan is, kan Linux niet van tevoren zeggen hoeveel geheugen het kind in beslag zal nemen, dus als de instelling overcommit_memory is ingesteld op nul, zal de vork mislukken tenzij er zoveel vrije RAM is als vereist om echt alle pagina's van het bovenliggende geheugen te dupliceren, met als resultaat dat als je een Redis-dataset van 3 GB en slechts 2 GB vrij geheugen hebt, het zal mislukken.

Door overcommit_memory in te stellen op 1 zegt Linux te ontspannen en de fork op een meer optimistische manier uit te voeren, en dit is inderdaad wat je wilt voor Redis.

Redis heeft niet zoveel geheugen nodig als het besturingssysteem denkt dat het nodig heeft om naar schijf te schrijven, dus kan de fork preventief falen.



  1. Redis-cli --csv optie (exporteren naar csv)

  2. Kan geen verbinding maken met MongoDB via node.js in Docker

  3. Mongo-interface

  4. HBase en Hive – Samen beter