diff --git a/HowtoMongoDB.md b/HowtoMongoDB.md index 28b5fc7c..75bc43fd 100644 --- a/HowtoMongoDB.md +++ b/HowtoMongoDB.md @@ -199,6 +199,26 @@ $ mongosh admin -u mongoAdmin -p PASSWORD Pour les accès aux bases, les utilisateurs sont stockés dans la collection _system.users_ propre à chaque base. +### Mémoire + +La mémoire utilisée par Mongo se répartit en deux types : + +* La mémoire résidente : celle nécessaire au stockage des bases de données, requêtes, indexes. +* La mémoire cache. + +MongoDB n'a pas de plafonnement de la mémoire totale utilisée. Il considère qu'il est le seul service sur le serveurs (!). + +Par défaut, il limite la taille de son cache à la moitié de la (RAM - 1G), avec un minimum de 256M. Par exemple, sur un serveur avec 6G, il limitera son cache à `(6-1)/2 = 2.5G`. + +Le problème, c'est que si la mémoire résidente consomme la moitié de la RAM (ou plus), même poncuellement, on se retrouve avec des erreurs `tcmalloc: allocation failed` dans `/var/log/syslog` et d'autres service qui se font OOM kill. + +Work in progress : + +Solutions : + +* Mauvaise ? Changer `storage.wiredTiger.engineConfig.cacheSizeGB`, car on ne sait pas jusqu'à combien la mémoire résidente peu aller (et du coup combien on peut laisser au cache). +* Bonne ? Définir les options systemd `MemoryHigh` (75% RAM) et `MemoryMax` (85% RAM) + `Restart=on-failure` en cas de OOM. + ## Accès en CLI Comme pour MySQL, on peut manipuler MongoDB en CLI en mode interactif avec la commande `mongosh`.