Estamos usando o MongoDB há várias semanas, a tendência geral que vimos foi que o mongodb está usando muita memória (muito mais do que o tamanho total de seu conjunto de dados + índices).
Eu já li esta pergunta e esta pergunta , mas nenhuma parece resolver o problema que estou enfrentando, eles estão realmente explicando o que já está explicado na documentação.
A seguir estão os resultados dos comandos htop e show dbs .
Eu sei que o mongodb usa IO mapeado na memória, então basicamente o sistema operacional lida com o cache de coisas na memória, e o mongodb teoricamente deve liberar sua memória em cache quando outro processo solicitar memória livre , mas pelo que vimos, isso não acontece.
OOM entra em ação e começa a matar outros processos importantes, como postgres, redis, etc. (Como pode ser visto, para superar esse problema, aumentamos a RAM para 183 GB, que agora funciona, mas é muito caro. quase 4X do tamanho de todo o seu conjunto de dados)
Então,
- Esse uso de memória é realmente esperado e normal? (De acordo com a documentação, o WiredTiger usa no máximo ~ 60% de RAM para seu cache, mas considerando o tamanho do conjunto de dados, ele tem dados suficientes para poder levar 86 GB de RAM?)
- Mesmo que o uso de memória seja esperado, por que o mongo não libera sua memória alocada caso outro processo comece a solicitar mais memória? Vários outros processos em execução estavam sendo constantemente eliminados pelo linux oom, incluindo o próprio mongodb, antes de aumentarmos a RAM e isso tornava o sistema totalmente instável.
Obrigado !