As tempestades de conexão geralmente aparecem como picos inesperados na contagem de conexões e, com frequência, podem ser diagnósticadas erroneamente como problemas de desempenho do banco de dados .
Esta página aborda as causas comuns e soluções para tempestades de conexão e "too many connections" erros. Se precisar de suporte adicional depois de passar pelas seções a seguir, entre em contato com o Suporte técnico.
Verificações de pré-requisitos
Para confirmar se seu sistema está enfrentando um problema de tempestade de conexão ou limite de conexão, execute o serverStatus comando e verifique os seguintes indicadores:
Aumentos rápidos de
connections.currentAumentos rápidos de
connections.activeAumentando rapidamente
connections.totalCreatedAumentos em
metrics.commands.<command>.failed
Você também pode verificar as mensagens de log de seu sistema em busca de um grande número de mensagens "Connection accepted" com um connectionCount atributo de aumento rápido ou de aumentos nas entradas de registro de queries lentas.
Nas implantações do Atlas , você pode navegar até seu cluster na UI do Atlas e selecionar Metrics, então Connections para visualizar gráficos de contagem de conexão ao longo do tempo.
Problemas e Resoluções Comuns
As seções a seguir descrevem causas comuns de tempestades de conexão e como resolvê-las.
Configurações do pool de conexões mal configuradas
Se você definir minPoolSize muito abaixo de, o driver manterá apenas um pequeno número de conexões ociosas. Sob volumes de trabalho pesados ou após uma reinicialização, o driver deve abrir rapidamente muitas novas conexões para atingir o tamanho do pool de trabalho, o que pode causar um pico em novas maxPoolSize conexões.
Alta latência de servidor ou query
Se a latência do servidor ou da query aumentar, as conexões individuais permanecerão ativas por mais tempo. Isso força o driver a abrir conexões adicionais para lidar com as solicitações recebidas, aumentando a contagem total de conexões.
Se você notar um valor de connections.active alto e uma latência de query elevada, defina minPoolSize para um valor mais próximo de maxPoolSize na string de conexão do driver. Isso pré-aquece o pool de conexões e reduz a necessidade de abrir muitas novas conexões sob carga.
Maior carga operacional
Um aumento súito no tráfego do aplicação pode esgotar o pool de conexões disponível, forçando o driver a abrir novas conexões rapidamente.
Se você notar picos de conexão que ocorrem com o aumento do tráfego, considere a possibilidade de definir minPoolSize para um valor mais próximo de maxPoolSize na string de conexão do driver. Isso garante que o driver mantenha conexões pré-estabelecidas suficientes para lidar com picos de tráfego sem precisar abrir rapidamente novas conexões.
Eventos de rede transitórios ou reinicializações de aplicativos
Interrupções de rede, reinicializações contínuas ou eventos inesperados de dimensionamento da camada de aplicação podem fazer com que as instâncias de aplicação se reconectam simultaneamente, sobrecarregando o servidor com novas solicitações de conexão.
Se ocorrerem picos de conexão durante eventos de implantação ou interrupções de rede, considere configurar o maxPoolSize para limitar o número total de conexões que cada instância do aplicação pode abrir. Isso limita o impacto de eventos de reconexão simultâneos.
Criação do MongoClient por solicitação
Se você criar um novo MongoClient em cada solicitação ou invocação de função, em vez de reutilizar uma única instância compartilhada, cada cliente poderá abrir seu próprio pool de conexões independente até o maxPoolSize configurado. Em muitas solicitações simultâneas ou ambientes de execução de curta duração, isso multiplica o número total de conexões abertas e pode desencadear tempestades de conexões.
Se você notar um aumento constante das contagens de conexões correlacionadas ao volume de solicitações, verifique se seu aplicação instancia uma nova MongoClient por solicitação e considere implementar MongoClient como uma única instância compartilhada em todas as operações. Isso estabiliza o uso da conexão e evita picos de contagem de conexões causados pela multiplicação do pool.
Pools de roteadores mal configurados em clusters fragmentados
Em clusters fragmentados, cada roteador mantém pools de conexão em cada shard. Se esses pools não forem dimensionados corretamente, uma tempestade de conexão na camada do aplicação poderá se propagar para a camada do shard, à medida que os roteadores abrirem simultaneamente um grande número de conexões mongos internas.
Se você notar tempestades de conexão originadas de processos do,mongos considere:
Limitando o número de grupos de
taskExecutorconexão do em cada roteador configurandotaskExecutorPoolSizeo parâmetro.Controlando o número mínimo e máximo de conexões em cada pool de roteador utilizando os parâmetros
ShardingTaskExecutorPoolMinSizeShardingTaskExecutorPoolMaxSizee.
Atlas Cluster Subprovisionado
Cada camada do cluster do Atlas impõe um número máximo de conexões simultâneas de entrada por nó. Quando um aplicação abre mais conexões do que a camada permite, o cluster pode rejeitar novas solicitações de conexão com o seguinte erro:
connection refused because too many open connections
Se você notar rejeições de conexão que ocorrem com o aumento da carga e não melhoram depois de ajustar as configurações do pool, verifique se connections.current está no limite ou próximo ao limite da camada do cluster. Para visualizar os limites de conexão por camada do cluster, consulte Limites de Serviço do Atlas.
Se a contagem de conexões estiver igual ou próxima ao limite da camada do cluster , considere a possibilidade de atualizar para uma camada do cluster superior para aumentar o limite de conexão por nó. Para dimensionar seu cluster, consulte Modificar um cluster.
Verificar resolução
Para confirmar que a tempestade de conexões foi resolvida:
serverStatusExecuteconnections.currentconnections.availablenovamente e verifique se retornou aos níveis esperados em relação a.Confirme que seus
mongodregistros ou não mostram mais erros relacionados à conexão.mongosNos sistemas do Atlas , confirme se o gráfico de contagem de conexões na visualização do Atlas Metrics retornou à linha de base.
Diagnósticos a serem coletados para mais suporte
Se o problema persistir, entre em contato com o Suporte técnico. Antes de entrar em contato com o suporte, reúna as seguintes informações:
Saída de
db.serverStatus()Trechos de registro de
mongodou que mostram erros ou avisos relacionados àmongosconexãoSua string de conexão de driver, especificamente com os valores de
maxPoolSize,minPoolSizeewaitQueueTimeoutMSPara implementações do Atlas , inclua:
O número de instâncias do aplicação e sua topologia de implantação
Uma captura de tela do gráfico Atlas Connections durante o período em que o problema ocorreu