dataiotech Labs
dbaguidedbaguideDBAdataxtoolsdataopsphere
Runbooks Library/mongodb/#49
Runbook #49
mongodb
AvailabilitySEV1 · CRITICAL OUTAGE15-30 dakika / 15-30 minsclusterAdmin / dbAdminAnyDatabase / root

MongoDB Connection Exhaustion: Find the Client Filling the Pool

Identifies connections by client and application, distinguishes pool leaks from connection storms, and guides safe response when MongoDB approaches its connection limit.

Related Metrics:M49
Related Scripts:S88S87S81
#connections#maxIncomingConnections#connection-pool#incident

Operational Safety & Risk Notice

This runbook contains operational intervention steps; several are write-impacting (KILL, terminate, DROP, RESIZE). Verify in a staging environment first, and apply sequentially in production with verification.

🟢 Salt Okunur (Read-Only)·🟡 Geri Alınabilir (Reversible)·🔴 Yüksek Etkili / Geri Alınamaz (High Impact)

1. Symptom & Signals

`db.serverStatus().connections.current` hızla artar, `available` düşer (M49); istemcide connection timeout, server selection timeout veya connection refused görülür. `mongos` kullanılan kümelerde yönlendirici ve `mongod` bağlantılarını ayrı değerlendirin.

2. Business & Technical Impact

Yeni bağlantılar açılamaz, havuz beklemeleri ve API hataları artar. Mevcut oturumlar çalışsa da kısa süre sonra uygulama kullanılmaz hale gelebilir.

3. Diagnosis & Root-Cause Analysis

🟢 Read-Only1. Yönetim bağlantısı hâlâ kurulabiliyorsa ilgili `mongod` üzerinde ölçün (S87):
javascript
const c = db.serverStatus().connections;
({ current: c.current, available: c.available, totalCreated: c.totalCreated });
🟢 Read-Only2. Bağlanan uygulamaları ve kaynakları gruplayın (S88). Çok sayıda idle bağlantı için `idleConnections` gerekebilir:
javascript
db.getSiblingDB('admin').aggregate([
  { $currentOp: { allUsers: true, idleConnections: true } },
  { $match: { client: { $type: 'string' } } },
  { $group: { _id: { client: '$client', app: '$appName' }, count: { $sum: 1 } } },
  { $sort: { count: -1 } }, { $limit: 20 }
]);

`client` genellikle port içerir; aynı IP'nin farklı portlarını ayrıca gruplayın. `$currentOp` için uygun clusterMonitor/inprog yetkisi gerekir. Komut desteklenmiyorsa uygulama havuzu telemetrisi ve bağlantı loglarını kullanın.

🟢 Read-Only3. Ani `totalCreated` artışı havuzun tekrar tekrar açılmasına, sürekli yüksek `current` büyük havuz/sızıntıya, ağır aktif operasyonlar (S81) ise sorgu birikmesine işaret edebilir.

4. Remediation & Action Plan

🟡 Reversible1. Problemli uygulamada yeni bağlantı üretimini azaltın: deployment başına `maxPoolSize` ve uygulama replika sayısını birlikte hesaplayın, yeniden bağlanma/backoff fırtınasını sınırlayın. Uygulama owner'ıyla koordine edin.
🟡 Reversible2. Sızdıran uygulama örneğini kontrollü yeniden başlatın; tüm örnekleri aynı anda yeniden başlatmayın, yeniden bağlanma fırtınası yaratır.
🔴 HIGH RISK / IRREVERSIBLE3. Zorunluysa yalnızca belirlenmiş problemli oturumun **işlemini** `db.killOp(opid)` ile sonlandırın; bu bağlantı limitini kalıcı çözmez ve işlem kısmen uygulanmış olabilir. Toplu kill veya `mongod` restart yapmayın.
🔴 HIGH RISK / IRREVERSIBLE4. `net.maxIncomingConnections` sınırını körlemesine artırmayın. İşletim sistemi açık dosya sınırını (`ulimit -n`), bellek rezervini ve `mongos` topolojisini kontrol edin; yapılandırma değişikliği için ilgili sürüm prosedürünü izleyin.

5. Verification & Health Checks

M49 düşüyor, `available` payı toparlanıyor, `totalCreated` artışı olağan hızda; uygulamanın yeni bağlantıları ve sorguları başarılı. En az 15 dakika tekrarını izleyin.

6. Rollback & Contingency Plan

Havuz ayarını eski değere ve eski deployment sürümüne döndürün. Sonlandırılan işlemler geri alınmaz; uygulamanın idempotent retry davranışını ve olası kısmi sonuçları kontrol edin.

More MONGODB Runbooks