oom_reaper: MongoDb sem memória

oom_reaper: MongoDb sem memória

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:

insira a descrição da imagem aqui

De repente, houve um uso massivo de RAM pelo mongodb: insira a descrição da imagem aqui

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:

insira a descrição da imagem aqui

Curiosamente, o uso de memória do SECONDARY não estava mudando naquele momento: insira a descrição da imagem aqui

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.

informação relacionada