Compter les connexions par application et client (diagnostic de tempête de connexions)
MongoDBPerformancesCommande
// 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 }
])Ce que fait la commande
Affiche le nombre total et disponible de connexions sur le serveur, puis regroupe les connexions ouvertes par appName et IP client avec le nombre de connexions actives.
Quand l'utiliser
Quand le nombre de connexions bondit soudainement, sur des erreurs 'connection refused' ou de timeout du pool, pour trouver quel serveur d'application fuit des connexions.
Attention
idleConnections: true renvoie aussi toutes les connexions inactives, donc sur les systèmes avec des milliers de connexions la sortie est volumineuse ; c'est pourquoi la synthèse avec $group est importante. Les lignes avec un client null sont des threads internes. Chaque connexion consomme environ 1 MB de mémoire ; une tempête de connexions fait aussi croître la mémoire hors du cache WiredTiger.
Voir aussi
- Inspecter un plan de requête avec les statistiques d'exécution réelles (explain executionStats)
- Extraire les requêtes et formes de requêtes les plus lentes depuis les données du profiler
- Trouver les index inutilisés et les masquer avant de les supprimer (hideIndex)
- Mesurer la pression sur le cache WiredTiger (remplissage, taux de pages sales, éviction par l'application)