
Executamos um pequeno conjunto de réplicas do mongodb em três servidores bare metal (sem virtualização, sem docker/kubernetes) com Debian 11 e mongodb 5.0.6:
máquinaA: 128 GB de RAM, disco de 1 TB, máquina PRIMÁRIA B: 128 GB de RAM, disco de 1 TB, máquina SECUNDÁRIA C: 8 GB de RAM, disco de 20 GB, ÁRBITRO
De repente, experimentamos interrupções com erros no log do nosso aplicativo, como "NotWritablePrimary"/"MongoNotPrimaryException" - estávamos assumindo que nossa cadeia de conexão garantiria que nenhuma interrupção ocorresse:
mongodb://machineA:27017,machineB:27017/?replicaSet=MyRepl&waitQueueMultiple=10&readPreference=primaryPreferred
Descobriu-se que a instância PRIMARY mongodb foi eliminada pelo kernel do Linux, pois estava consumindo muita RAM. O conjunto de réplicas estava funcionando há 3 meses sem problemas em nenhum momento. Mas de repente vejo um consumo de RAM assim:
De repente, houve um uso massivo de RAM pelo mongodb:
Logo após o kernel encerrar o processo mongod, ele foi reiniciado pelo SystemD enquanto é executado como um serviço. Mas logo após a reinicialização ele consome novamente a quantidade máxima de RAM até morrer novamente.
De repente, esse comportamento parou esta manhã. Não alteramos nada em nosso aplicativo, então a questão agora é: o que consome tanta RAM no processo mongodb?
Pelo que eu sei, o mecanismo WireTiger está usando cerca de 50% da RAM disponível, mas isso não explicaria o uso máximo da RAM total da máquina. Também tenho algumas métricas do Percona mongodb_exporter, que mostram que a RAM é usada pelo mongodb e por nenhum outro processo no sistema:
Curiosamente, o uso de memória do SECONDARY não estava mudando naquele momento:
Alguém tem alguma idéia ou sugestão do que está acontecendo aqui?
Responder1
Descobrimos que um de nossos serviços de aplicativo estava funcionando mal em determinadas circunstâncias e foi um pouco difícil de ver para nós.
Ao martelar constantemente contra o MongoDb, parece que o uso de memória está ficando cada vez maior, em vez de mais recursos de CPU serem usados como eu esperaria. A certa altura, o processo mongod foi eliminado pelo kernel do Linux.
Depois de corrigirmos o problema em nosso aplicativo, a situação desapareceu.