Docs Menu
Docs Home
/ /

Solucionar tormentas de conexiones

Las tormentas de conexiones suelen manifestarse como picos repentinos en el conteo de conexiones y a menudo pueden diagnosticarse erróneamente como problemas de rendimiento de la base de datos.

Esta página cubre las causas y resoluciones comunes de tormentas de conexión y "too many connections" errores. Si necesitas soporte adicional tras revisar las siguientes secciones, contacta con Soporte técnico.

Para confirmar si tu implementación está experimentando una tormenta de conexiones o un problema con el límite de conexiones, ejecuta el comando serverStatus y verifica los siguientes indicadores:

También puedes consultar los mensajes de registro de tu implementación para controlar numerosos mensajes "Connection accepted" con un atributo connectionCount que aumenta rápidamente, o para aumentos en las entradas del registro de query lentas.

En las implementaciones de Atlas, puedes navegar a tu clúster en la Interfaz de Usuario de Atlas y seleccionar Metricsy luego Connections para ver gráficos de recuento de conexiones a lo largo del tiempo.

Las siguientes secciones describen las causas comunes de las tormentas de conexión y cómo resolverlas.

Si estableces minPoolSize mucho más bajo que maxPoolSize, el driver mantiene solo un pequeño número de conexiones inactivas. Bajo cargas de trabajo intensas o después de un reinicio, el controlador debe abrir rápidamente muchas nuevas conexiones para alcanzar el tamaño del pool de trabajo, lo que puede causar un pico en nuevas conexiones.

Si la latencia del servidor o la query aumenta, las conexiones individuales permanecen activas por más tiempo. Esto obliga al driver a abrir conexiones adicionales para gestionar las solicitudes entrantes, aumentando el conteo total de conexiones.

Si observa un valor alto de connections.active y una latencia de query elevada, establezca minPoolSize en un valor más cercano a maxPoolSize en su cadena de conexión del driver. Esto pre-calienta el pool de conexiones y reduce la necesidad de abrir muchas conexiones nuevas bajo carga.

Un aumento inesperado en el tráfico de tu aplicación puede agotar el pool de conexiones disponible, obligando al driver a abrir nuevas conexiones rápidamente.

Si nota picos de conexión que ocurren con aumentos de tráfico, considera establecer minPoolSize a un valor más cercano a maxPoolSize en su cadena de conexión de controlador. Esto garantiza que el controlador mantenga suficientes conexiones preestablecidas para gestionar picos de tráfico sin la necesidad de abrir rápidamente nuevas conexiones.

Las interrupciones del servicio de red, los reinicios en secuencia o los eventos repentinos de escalado de nivel de la aplicación pueden provocar que las instancias de la aplicación se reconecten simultáneamente, saturando el servidor con nuevas solicitudes de conexión.

Si se producen picos de conexiones durante eventos de implementación o interrupciones de red, considera configurar maxPoolSize para limitar el número total de conexiones que cada instancia de la aplicación puede abrir. Esto limita el impacto de los eventos de reconexión simultáneos.

Si se crea un nuevo MongoClient en cada solicitud o invocación de función en lugar de reutilizar una sola instancia compartida, cada cliente puede abrir su propio pool de conexiones independiente hasta el maxPoolSize configurado. A través de muchas solicitudes simultáneas o entornos de ejecución de corta duración, esto multiplica el número total de conexiones abiertas y puede provocar tormentas de conexiones.

Si observa un aumento constante en el número de conexiones que se correlaciona con el volumen de solicitudes, verifique si su aplicación inicia una nueva MongoClient por solicitud y considere implementar MongoClient como una instancia compartida única en todas las operaciones. Esto estabiliza el uso de conexiones y previene picos en el número de conexiones causados por la multiplicación del pool.

En los clústeres fragmentados, cada router mongos mantiene pools de conexiones en cada partición. Si estos grupos no tienen el tamaño correcto, una tormenta de conexiones en el nivel de la aplicación puede propagarse al nivel partición a medida que los routers abren simultáneamente una gran cantidad de conexiones internas.

Si nota que se originan tormentas de conexiones de los procesos mongos, considere:

Cada nivel de clúster de MongoDB Atlas aplica un número máximo de conexiones entrantes simultáneas por nodo. Cuando una aplicación abre más conexiones de las que permite el nivel, el clúster podría rechazar nuevas solicitudes de conexión con el siguiente error:

connection refused because too many open connections

Si notas rechazos de conexión que se producen con una mayor carga y no mejoran después de ajustar la configuración del pool, verifica si connections.current está en o cerca del límite para el nivel de clúster. Para ver los límites de conexiones por nivel de clúster, consulta Límites del servicio Atlas.

Si la cantidad de conexiones está en o cerca del límite de nivel de clúster, considera actualizar a un nivel de clúster superior para aumentar el límite de conexiones por nodo. Para escalar tu clúster, consulta Modificar un clúster.

Para confirmar que la tormenta de conexiones se ha resuelto:

  • Vuelva a ejecutar serverStatus y compruebe que connections.current ha vuelto a los niveles esperados en relación con connections.available.

  • Confirma que tus mongod o mongos registros ya no muestran errores relacionados con la conexión.

  • En las implementaciones de Atlas, confirme que el gráfico de recuento de conexiones en la vista Metrics de Atlas haya vuelto a la línea de base.

Si el problema persiste, contacta con Soporte técnico. Antes de ponerse en contacto con asistencia, recopile la siguiente información:

  • Salida de db.serverStatus()

  • Extractos de registros de mongod o mongos que muestran errores o advertencias relacionadas con la conexión

  • Su cadena de conexión de controlador, específicamente con los valores de maxPoolSize, minPoolSize y waitQueueTimeoutMS

  • Para implementaciones de Atlas, incluye:

    • El número de instancias de aplicación y su topología de implementación

    • Una captura de pantalla del grafo de Atlas Connections durante el periodo en el que se produjo el problema

Volver

Optimización del rendimiento

En esta página