Usiamo MongoDB da diverse settimane, la tendenza generale che abbiamo visto è stata che mongodb sta usando troppa memoria (molto più dell'intera dimensione del suo set di dati + indici).
Ho già letto questa domanda e questa domanda , ma nessuna sembra affrontare il problema che ho riscontrato, in realtà stanno spiegando ciò che è già stato spiegato nella documentazione.
I seguenti sono i risultati di htop e mostrano i comandi dbs .
So che mongodb utilizza IO mappato in memoria, quindi sostanzialmente il sistema operativo gestisce la memorizzazione nella cache delle cose nella memoria, e mongodb dovrebbe teoricamente lasciare andare la sua memoria cache quando un altro processo richiede memoria libera , ma da quello che abbiamo visto, non lo fa.
OOM inizia a uccidere altri importanti processi come postgres, redis, ecc. (Come si può vedere, per ovviare a questo problema, abbiamo aumentato la RAM a 183 GB che ora funziona ma è piuttosto costoso. Mongo usa ~ 87 GB di RAM, quasi 4 volte la dimensione dell'intero set di dati)
Così,
- Questo uso della memoria è davvero previsto e normale? (Come da documentazione, WiredTiger utilizza al massimo il ~ 60% di RAM per la sua cache, ma considerando le dimensioni del set di dati, ha anche abbastanza dati per essere in grado di occupare 86 GB di RAM?)
- Anche se è previsto l'utilizzo della memoria, perché mongo non lascerà andare la sua memoria allocata nel caso in cui un altro processo inizi a richiedere più memoria? Vari altri processi in esecuzione venivano costantemente uccisi da Linux Oom, incluso lo stesso mongodb, prima di aumentare la RAM e rendere il sistema totalmente instabile.
Grazie !