MongoDB Açık Dosya Tanımlayıcı (FD) Yetersizliği: ulimit -n Sınırları, Koleksiyon/İndeks Sayısı ve systemd Ayarları
Varsayılan 1024 açık dosya sınırının her koleksiyon ve indeks için dosya açan WiredTiger motorunu kilitlemesi; ulimit, limits.conf ve systemd LimitNOFILE yapılandırması.
Operasyonel Doğrulama & Güvenilirlik Standardı
Hata mesajı semptomdur, kök neden değildir. Sunucuyu yeniden başlatmadan veya rastgele ayar değiştirmeden önce aşağıdaki "Nedeni ayırt eden tek sorgu"yu çalıştırarak gerçek senaryoyu netleştirin.
▸Belirti
MongoDB sunucusu yeni istemci kabul edemez veya koleksiyon okurken loglara şu hata basılır:
Failed to accept socket: Too many open files
WiredTiger error (24) [1234:0x7f]: /data/db/collection-123.wt: handle-open: open: Too many open files▸Sahada Ne Görürsün?
Sunucu yeni bağlantı açamaz. Binlerce koleksiyonu veya yüzlerce istemci bağlantısı olan sunucularda aniden tüm istekler reddedilir.
▸Kök Neden Matrisi
| Olasılık | Kök Neden | Açıklama |
|---|---|---|
| %60 | İşletim Sistemi `ulimit -n` Sınırı (1024) | Linux varsayılan dosya tanıtıcı limiti 1024'tür. WiredTiger her koleksiyon ve indeks için ayrı dosya açar; sınır hızla dolup patlar. |
| %30 | Bağlantı Patlaması (Her Bağlantı 1 Socket FD) | 800 istemci bağlandığında geriye dosya açmak için yeterli FD kalmaz. |
| %10 | systemd Servis Tanımında LimitNOFILE Eksikliği | limits.conf ayarlanmış olsa dahi systemd unit dosyası ezebilir. |
▸ACİL RUNBOOK (0-5dk)
# 1. mongod sürecinin mevcut açık dosya limitlerini gör
cat /proc/$(pidof mongod)/limits | grep "Max open files"
# 2. Çalışan sürecin kaç dosya açtığını say
lsof -p $(pidof mongod) | wc -l
# 3. Canlı çalışan mongod sürecinin limitini geçici olarak yükselt (prlimit)
sudo prlimit --pid=$(pidof mongod) --nofile=64000:64000▸KALICI BLUEPRINT
- 1/etc/security/limits.conf Ayarı:
mongod soft nofile 64000
mongod hard nofile 64000
mongod soft nproc 64000
mongod hard nproc 64000- 1systemd Unit Override:
/etc/systemd/system/mongod.service.d/override.confiçine:
[Service]
LimitNOFILE=64000
LimitNPROC=64000sudo systemctl daemon-reload && sudo systemctl restart mongod
▸Doğrulama
cat /proc/$(pidof mongod)/limits | grep "open files"
# Çıktı: Max open files 64000 64000Diğer Veritabanı Hata Teşhisleri
Kriz anında başvurabileceğiniz diğer doğrulanmış hata rehberleri.
MongoDB "not master" / NotWritablePrimary Hatası
Failover sonrası "not master" hatasının nedeni, replicaSet içermeyen bağlantı dizesi, retryWrites ve election fırtınası teşhisi.
MongoDB E11000: Duplicate Key Error Teşhisi ve Çözümü
Aynı anahtara sahip iki dokümanın eşzamanlı eklenmesiyle oluşan E11000 hatasının tespiti, getIndexes denetimi ve $setOnInsert ile upsert desenleri.
MongoDB MongoNetworkError & HostUnreachable Teşhisi
Replica set primary düğümünün çökmesi, yanlış mongodb+srv dizesi ve ağ gecikmelerinde sürücünün bağlantı havuzunu temizlemesi; rs.status() ve kalıcı timeout ayarları.