DBAtlas · Atlas de operaciones de bases de datos

Contar conexiones por aplicación y cliente (diagnóstico de connection storm)

MongoDBRendimiento

Comando

// 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.

Abrir en DBAtlas →

Relacionado