Nous utilisons MongoDB depuis plusieurs semaines maintenant, la tendance générale que nous avons constatée est que mongodb utilise beaucoup trop de mémoire (bien plus que la taille totale de son ensemble de données + index).
J'ai déjà lu cette question et cette question , mais aucun ne semble résoudre le problème que j'ai rencontré, ils expliquent en fait ce qui est déjà expliqué dans la documentation.
Voici les résultats des commandes htop et show dbs .
Je sais que mongodb utilise des E / S mappées en mémoire, donc fondamentalement, le système d'exploitation gère les éléments de mise en cache dans la mémoire, et mongodb devrait théoriquement lâcher sa mémoire en cache lorsqu'un autre processus demande de la mémoire libre , mais d'après ce que nous avons vu, ce n'est pas le cas.
Le MOO démarre et tue d'autres processus importants, par exemple les postgres, les redis, etc. (Comme on peut le voir, pour surmonter ce problème, nous avons augmenté la RAM à 183 Go, ce qui fonctionne maintenant mais est assez cher. Mongo utilise ~ 87 Go de RAM, près de 4 fois la taille de l'ensemble de ses données)
Alors,
- Cette utilisation de la mémoire est-elle vraiment attendue et normale? (Selon la documentation, WiredTiger utilise au maximum ~ 60% de RAM pour son cache, mais compte tenu de la taille de l'ensemble de données, dispose-t-il même de suffisamment de données pour pouvoir prendre 86 Go de RAM?)
- Même si l'utilisation de la mémoire est attendue, pourquoi mongo ne lâche-t-il pas sa mémoire allouée au cas où un autre processus commencerait à demander plus de mémoire? Divers autres processus en cours d'exécution étaient constamment tués par linux oom, y compris mongodb lui-même, avant d'augmenter la RAM et de rendre le système totalement instable.
Merci !