Contar conexiones por aplicación y cliente (diagnóstico de connection storm)
MongoDBRendimientoComando
// Total, available and rejected connection counts:
db.serverStatus().connections
// Count connections by application name and client IP:
db.getSiblingDB("admin").aggregate([
{ $currentOp: { allUsers: true, idleConnections: true } },
{ $group: { _id: { app: "$appName", client: { $arrayElemAt: [{ $split: ["$client", ":"] }, 0] } }, conns: { $sum: 1 }, active: { $sum: { $cond: ["$active", 1, 0] } } } },
{ $sort: { conns: -1 } },
{ $limit: 20 }
])Qué hace
Muestra el número total y disponible de conexiones en el servidor y luego agrupa las conexiones abiertas por appName e IP de cliente junto con cuántas están activas.
Cuándo usarlo
Cuando el número de conexiones se dispara de repente, ante errores 'connection refused' o de timeout del pool, para encontrar qué servidor de aplicaciones pierde conexiones.
Precaución
idleConnections: true también devuelve todas las conexiones inactivas, por lo que en sistemas con miles de conexiones la salida es grande; por eso es importante resumir con $group. Las filas con client null son hilos internos. Cada conexión consume aproximadamente 1 MB de memoria; un connection storm también hace crecer la memoria fuera de la caché de WiredTiger.
Relacionado
- Inspeccionar un plan de consulta con estadísticas de ejecución reales (explain executionStats)
- Extraer las consultas y query shapes más lentas de los datos del profiler
- Encontrar índices no usados y ocultarlos antes de eliminarlos (hideIndex)
- Medir la presión sobre la caché de WiredTiger (llenado, proporción sucia, eviction por la aplicación)