Verbindungen nach Anwendung und Client zählen (Diagnose eines Connection Storms)
MongoDBPerformanceBefehl
// 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 }
])Was es tut
Zeigt die gesamte und verfügbare Verbindungsanzahl auf dem Server und gruppiert dann offene Verbindungen nach appName und Client-IP samt der Anzahl aktiver Verbindungen.
Wann einsetzen
Wenn die Verbindungsanzahl plötzlich sprunghaft steigt, bei Fehlern 'connection refused' oder Pool-Timeouts, um herauszufinden, welcher Anwendungsserver Verbindungen leckt.
Vorsicht
idleConnections: true liefert auch alle inaktiven Verbindungen, auf Systemen mit Tausenden Verbindungen ist die Ausgabe daher groß; deshalb ist das Zusammenfassen mit $group wichtig. Zeilen mit null-Client sind interne Threads. Jede Verbindung verbraucht etwa 1 MB Speicher; ein Connection Storm lässt auch den Speicher außerhalb des WiredTiger-Caches wachsen.
Verwandte Einträge
- Abfrageplan mit echten Ausführungsstatistiken untersuchen (explain executionStats)
- Die langsamsten Abfragen und Query Shapes aus Profiler-Daten ermitteln
- Ungenutzte Indizes finden und vor dem Löschen verstecken (hideIndex)
- Druck auf den WiredTiger-Cache messen (Füllgrad, Dirty-Anteil, Eviction durch Anwendungs-Threads)