Hier zijn enkele bronnen van "verborgen" geheugengebruik in Redis:
-
Marc noemde al de buffers die de meester bijhoudt om de slaaf te voeden. Als een slave achterloopt op zijn master (omdat deze bijvoorbeeld op een langzamere box draait), zal er wat geheugen op de master worden verbruikt.
-
wanneer langlopende opdrachten worden gedetecteerd, logt Redis deze in het SLOWLOG-gebied, wat wat geheugen in beslag neemt. Misschien wilt u het SLOWLOG LEN-commando gebruiken om het aantal records dat u hier heeft te controleren.
-
communicatiebuffers kunnen ook geheugen in beslag nemen. Voor zover ik me herinner, was het met oude versies van Redis (en 2.4 is vrij oud - je zou echt moeten upgraden), grenzeloos, wat betekent dat als je een groot object op een bepaald punt overbrengt, de communicatiebuffer die aan deze clientverbinding is gekoppeld, zal groeien en krimp nooit. Als er veel klanten zijn die af en toe met grote objecten te maken hebben, zou dat een mogelijke verklaring kunnen zijn. Als je commando's gebruikt om zeer grote gegevens uit Redis op te halen (in één keer), kan dat ook een verklaring zijn. Een eenvoudig KEYS *-commando dat wordt toegepast op een Redis-server waarop miljoenen sleutels zijn opgeslagen, verbruikt bijvoorbeeld een aanzienlijke hoeveelheid geheugen.
Je zei dat je objecten hebt die zo groot zijn als 25 MB. U hebt 404-clientverbindingen. Als elk van hen op een bepaald moment toegang moet hebben tot dergelijke objecten, verbruikt dit 10 GB geheugen.