जवाबों:
एक अन्य दृष्टिकोण, मेमोरी की ओवरकॉमिटिंग को अक्षम करना है।
अपने स्मृति प्रबंधन के लिए पवित्रता के कुछ झलक बहाल करने के लिए:
- OOM किलर अक्षम करें (
vm.oom-kill = 0
/etc/sysctl.conf में डालें )- स्मृति ओवरकमिट अक्षम (पुट
vm.overcommit_memory = 2
में/etc/sysctl.conf
)ये सेटिंग्स पारंपरिक तरीके से लिनक्स का व्यवहार करेंगी (यदि एक प्रक्रिया अनुरोध की तुलना में अधिक मेमोरी उपलब्ध है
ध्यान दें कि यह एक टर्नरी मूल्य है:malloc()
तो विफल हो जाएगी और मेमोरी का अनुरोध करने वाली प्रक्रिया उस विफलता से निपटने की उम्मीद करती है)।
- 0 = "यदि हमारे पास पर्याप्त रैम है तो अनुमान लगाएं"
- 1 = "हमेशा हां कहें"
- 2 = "यदि हमारे पास स्मृति नहीं है तो कहो"
यह एप्लिकेशन को मेमोरी से बाहर चलने से निपटने के लिए मजबूर करेगा, और संभवतः इसके लॉग / कोरडंप / आदि आपको कुछ उपयोगी दे सकते हैं।
नोट: जब आपका सिस्टम मेमोरी से बाहर चला जाता है, तो आप नई प्रक्रियाओं को स्पॉन करने में सक्षम नहीं होंगे! आपको सिस्टम से बाहर रखा जा सकता है।
echo 1 > /proc/sys/vm/oom_dump_tasks
जो अधिकतम के बारे में लगता है कि आप आउट-ऑफ-मेमोरी त्रुटियों को प्रदर्शित करने के लिए कर्नेल प्राप्त कर सकते हैं।
https://www.kernel.org/doc/Documentation/sysctl/vm.txt
जब कर्नेल एक OOM- हत्या करता है तो एक सिस्टम-वाइड टास्क डंप (कर्नेल थ्रेड्स को छोड़कर) उत्पन्न करने में सक्षम करता है और इसमें pid, uid, tgid, vm size, rss, nr_ptes, swapents, oom_score_adj स्कोर, और नाम जैसी जानकारी शामिल होती है। यह निर्धारित करने में मददगार है कि OOM किलर को क्यों लगाया गया था, जिससे उस दुष्ट कार्य की पहचान की जा सके, और यह निर्धारित करने के लिए कि OOM हत्यारे ने उस कार्य को चुना जिसे उसने मारने के लिए किया था।
यदि इसे शून्य पर सेट किया जाता है, तो यह जानकारी दबा दी जाती है। हजारों कार्यों के साथ बहुत बड़ी प्रणालियों पर प्रत्येक के लिए मेमोरी स्टेट की जानकारी को डंप करना संभव नहीं है। जब सूचना वांछित न हो, तो ऐसी प्रणालियों को OOM स्थितियों में एक प्रदर्शन जुर्माना लगाने के लिए मजबूर नहीं किया जाना चाहिए।
यदि इसे गैर-शून्य पर सेट किया जाता है, तो यह जानकारी तब दिखाई जाती है जब ओओएम हत्यारा वास्तव में एक मेमोरी-हॉगिंग कार्य को मारता है।