sql >> Database teknologi >  >> NoSQL >> Redis

redis bgsave mislykkedes, fordi gaffel Kan ikke allokere hukommelse

Mere specifikt fra Redis FAQ

Redis-baggrundslagringsskemaet er afhængig af kopi-på-skriv-semantikken for gaffel i moderne operativsystemer:Redis-gafler (opretter en underordnet proces), der er en nøjagtig kopi af forælderen. Den underordnede proces dumper DB'en på disken og afslutter til sidst. I teorien burde barnet bruge lige så meget hukommelse som forælderen, der er en kopi, men faktisk takket være kopi-på-skriv-semantikken implementeret af de fleste moderne operativsystemer vil forældre- og barnprocessen dele de fælles hukommelsessider. En side bliver kun duplikeret, når den ændres i barnet eller forælderen. Da i teorien alle siderne kan ændre sig, mens underordnet processen gemmer, kan Linux ikke på forhånd fortælle, hvor meget hukommelse barnet vil tage, så hvis overcommit_memory indstillingen er sat til nul, vil gaffel mislykkes, medmindre der er så meget ledig RAM som påkrævet for virkelig at duplikere alle de overordnede hukommelsessider, med det resultat, at hvis du har et Redis-datasæt på 3 GB og kun 2 GB ledig hukommelse, vil det mislykkes.

Indstilling af overcommit_memory til 1 siger, at Linux skal slappe af og udføre gaflen på en mere optimistisk allokeringsmåde, og det er virkelig, hvad du ønsker for Redis.

Redis har ikke brug for så meget hukommelse, som OS tror, ​​det gør for at skrive til disk, så det kan forebyggende svigte gaflen.



  1. Java Client til at forbinde ElasticCache Redis Cache Node

  2. Oversæt Queryable<T> tilbage til IMongoQuery

  3. mongoose/mongodb brugerdefineret sortering

  4. Få en tydelig aggregering af et matrixfelt på tværs af indekser