DBAtlas · Atlas für Datenbankbetrieb

Verbindungen nach Anwendung und Client zählen (Diagnose eines Connection Storms)

MongoDBPerformance

Befehl

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

In DBAtlas öffnen →

Verwandte Einträge