Kami telah menggunakan MongoDB selama beberapa minggu sekarang, tren keseluruhan yang telah kami lihat adalah bahwa mongodb menggunakan terlalu banyak memori (lebih dari seluruh ukuran dataset + indeksnya).
Saya sudah membaca pertanyaan ini dan pertanyaan ini , tetapi sepertinya tidak ada yang membahas masalah yang saya hadapi, mereka sebenarnya menjelaskan apa yang sudah dijelaskan dalam dokumentasi.
Berikut ini adalah hasil dari perintah htop dan show dbs .
Saya tahu bahwa mongodb menggunakan memori yang dipetakan IO, jadi pada dasarnya OS menangani caching di memori, dan mongodb secara teoritis harus melepaskan memori yang di-cache ketika proses lain meminta memori bebas , tetapi dari apa yang telah kita lihat, tidak.
OOM mulai membunuh proses penting lainnya seperti postgres, redis, dll. (Seperti yang dapat dilihat, untuk mengatasi masalah ini, kami telah meningkatkan RAM hingga 183GB yang sekarang berfungsi tetapi cukup mahal. Mongo menggunakan ~ 87GB ram, hampir 4X dari ukuran seluruh dataset)
Begitu,
- Apakah penggunaan memori sebanyak ini benar-benar diharapkan dan normal? (Sesuai dokumentasi, WiredTiger menggunakan paling banyak ~ 60% RAM untuk cache-nya, tetapi mengingat ukuran dataset, apakah itu bahkan memiliki cukup data untuk dapat mengambil 86GB RAM?)
- Bahkan jika penggunaan memori diharapkan, mengapa Anda tidak akan melepaskan memori yang dialokasikan jika proses lain mulai meminta lebih banyak memori? Berbagai proses yang berjalan lainnya terus-menerus dibunuh oleh linux oom, termasuk mongodb itu sendiri, sebelum kami meningkatkan RAM dan itu membuat sistem benar-benar tidak stabil.
Terima kasih!