हम कई हफ्तों से MongoDB का उपयोग कर रहे हैं, हमने जो समग्र प्रवृत्ति देखी है वह यह है कि मोंगोडब बहुत अधिक मेमोरी (इसके डेटासेट + इंडेक्स के पूरे आकार से बहुत अधिक) का उपयोग कर रहा है।
मैं पहले ही इस सवाल और इस सवाल के माध्यम से पढ़ चुका हूं , लेकिन जिस मुद्दे का मैं सामना कर रहा हूं, उस पते पर कोई भी नहीं जा रहा है, वे वास्तव में बता रहे हैं कि पहले से ही प्रलेखन में क्या समझाया गया है।
निम्नलिखित htop और शो dbs कमांड के परिणाम हैं ।
मुझे पता है कि मोंगोडब मेमोरी मैप्ड आईओ का उपयोग करता है, इसलिए मूल रूप से ओएस मेमोरी में कैशिंग चीजों को संभालता है, और मोंगॉडब को सैद्धांतिक रूप से इसकी कैश्ड मेमोरी को छोड़ देना चाहिए जब कोई अन्य प्रक्रिया मुफ्त मेमोरी का अनुरोध करती है , लेकिन हमने जो देखा है, वह नहीं करता है।
OOM अन्य महत्वपूर्ण प्रक्रियाओं जैसे कि पोस्टग्रेज, रेडिस इत्यादि को मारना शुरू कर देता है (जैसा कि देखा जा सकता है, इस समस्या को दूर करने के लिए, हमने RAM को 183GB तक बढ़ा दिया है जो अब काम करती है लेकिन बहुत महंगी है। मोंगो की ~ 87GB RAM का उपयोग करना) इसके संपूर्ण डेटासेट के आकार का लगभग 4X)
इसलिए,
- क्या यह स्मृति उपयोग वास्तव में अपेक्षित और सामान्य है? (प्रलेखन के अनुसार, WiredTiger अपने कैश के लिए अधिकतम ~ 60% RAM का उपयोग करता है, लेकिन डेटासेट के आकार को देखते हुए, क्या इसमें इतना डेटा भी है कि 86GB रैम लेने में सक्षम हो?)
- यहां तक कि अगर स्मृति उपयोग की अपेक्षा की जाती है, तो अन्य प्रक्रिया अधिक मेमोरी के लिए अनुरोध करने की स्थिति में मोंगो को अपनी आबंटित मेमोरी से जाने क्यों नहीं देगी? इससे पहले कि हम रैम को बढ़ाते, विभिन्न प्रकार की अन्य प्रक्रियाओं को लगातार लाइन ओओम द्वारा ही मार दिया जा रहा था, जिसमें मोंगोडब भी शामिल है।
धन्यवाद !