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

Hvordan bestemmer man Redis-hukommelseslækage?

Her er nogle kilder til "skjult" hukommelsesforbrug i Redis:

  • Marc nævnte allerede bufferne, der vedligeholdes af mesteren for at fodre slaven. Hvis en slave halter efter sin master (fordi den for eksempel kører på en langsommere boks), så vil der blive brugt noget hukommelse på masteren.

  • når der registreres langvarige kommandoer, logger Redis dem i SLOWLOG-området, hvilket tager noget hukommelse. Du vil måske bruge kommandoen SLOWLOG LEN til at kontrollere antallet af poster, du har her.

  • kommunikationsbuffere kan også tage hukommelse. Så vidt jeg husker, med gamle versioner af Redis (og 2.4 er ret gammel - du burde virkelig opgradere), var den ubegrænset, hvilket betyder, at hvis du overfører et stort objekt på et tidspunkt, vil kommunikationsbufferen, der er knyttet til denne klientforbindelse, vokse. og aldrig krympe. Hvis der er mange kunder, der lejlighedsvis beskæftiger sig med store genstande, kan det være en mulig forklaring. Hvis du bruger kommandoer til at hente meget store data fra Redis (i ét skud), kan det også være en forklaring. For eksempel vil en simpel KEYS *-kommando anvendt på en Redis-server, der lagrer millioner af nøgler, forbruge en betydelig mængde hukommelse.

Du nævnte, at du har objekter så store som 25 MB. Du har 404 klientforbindelser, hvis hver af dem skal have adgang til sådanne objekter på et tidspunkt, vil det forbruge 10 GB hukommelse.




  1. MongoDB:undtagelse i initAndListen:20 Forsøgte at oprette en låsefil på en skrivebeskyttet mappe:/data/db, afsluttende

  2. Redis godkendelsesfejl med Node.js og socket.io

  3. Hvordan unhideIndex() virker i MongoDB

  4. MongoDB BSON guide