Oto kilka źródeł „ukrytego” zużycia pamięci w Redis:
-
Marc wspomniał już o buforach utrzymywanych przez mastera do zasilania niewolnika. Jeśli urządzenie podrzędne pozostaje w tyle za urządzeniem nadrzędnym (ponieważ działa na przykład na wolniejszym komputerze), część pamięci zostanie zużyta na urządzeniu nadrzędnym.
-
po wykryciu długotrwałych poleceń Redis rejestruje je w obszarze SLOWLOG, co zajmuje trochę pamięci. Możesz użyć polecenia SLOWLOG LEN, aby sprawdzić liczbę rekordów, które tutaj masz.
-
bufory komunikacyjne mogą również zajmować pamięć. O ile dobrze pamiętam, ze starymi wersjami Redisa (a 2.4 jest dość stary - naprawdę powinieneś uaktualnić) był nieograniczony, co oznacza, że jeśli przeniesiesz duży obiekt w punkcie, bufor komunikacyjny związany z tym połączeniem klienckim wzrośnie i nigdy się nie kurczą. Jeśli jest wielu klientów, którzy od czasu do czasu zajmują się dużymi przedmiotami, może to być możliwym wytłumaczeniem. Jeśli używasz poleceń pobierających bardzo duże dane z Redis (w jednym ujęciu), może to być również wyjaśnieniem. Na przykład proste polecenie KEYS * zastosowane na serwerze Redis przechowującym miliony kluczy zużyje znaczną ilość pamięci.
Wspomniałeś, że masz obiekty o wielkości do 25 MB. Masz 404 połączenia klientów, jeśli każdy z nich potrzebuje dostępu do takich obiektów w danym momencie, zużyje 10 GB pamięci.