यह यहाँ बताया गया है कि OOM-Killer को इसके माध्यम से कॉन्फ़िगर किया जा सकता है overcommit_memory
और:
- 2 = कोई ओवरकम नहीं है। बहुत अधिक पूछने पर आवंटन विफल हो जाते हैं।
- 0, 1 = ओवरकॉम्मिट (वह या हमेशा)। मारने के कुछ प्रक्रिया (ते) कुछ heuristics जब बहुत अधिक स्मृति वास्तव में पहुँचा जा सकता है पर आधारित है।
अब, मैं पूरी तरह से गलत समझ सकता हूं, लेकिन उस प्रक्रिया को मारने के लिए कोई विकल्प नहीं है (या यह डिफ़ॉल्ट क्यों नहीं है) जो वास्तव में आवंटित स्मृति को एक्सेस करने की कोशिश करता है?
क्या होगा अगर एक महत्वपूर्ण प्रणाली प्रक्रिया बहुत अधिक मेमोरी के लिए पूछती है?
—
लॉरेंस
पहली जगह में - यह यह कर सकता है। लेकिन, उस प्रश्न के साथ सबसे बड़ी समस्या यह है कि सभी संभावना में अगर कोई प्रक्रिया मेमोरी के लिए कह रही है तो उसे नए तरीके से निष्पादित किया जा रहा है - या, दूसरे शब्दों में, यह एक नई प्रक्रिया है जो बहुत ही वर्तमान प्रसंस्करण में शामिल है। क्या आप इसके बजाय OOM ने आपके नॉट-ओपन-फॉर-थ्री-डे इम क्लाइंट को सिस्टम मेमोरी को बर्बाद करने की अनुमति दी या आप इस वर्ष YouTube को वास्तव में कुछ समय के लिए लोड करेंगे? linuxatemyram.com
—
mikeserv
यह वही है जो
—
बमर
no overcommit
विकल्प अनिवार्य रूप से करता है। यदि कोई प्रक्रिया बहुत अधिक मेमोरी मांगती है, तो वह विफल हो जाती है। यदि यह त्रुटि की जाँच करता है, तो यह आमतौर पर खुद को मार देगा; यदि ऐसा नहीं होता है, तो संभवत: यह एक सेगमेंटेशन त्रुटि प्राप्त करेगा, जब यह अशक्त सूचक को malloc()
वापस करने की कोशिश करता है , और यह दुर्घटनाग्रस्त हो जाएगा।
ध्यान दें कि 2 वास्तव में
—
hans_meine
no overcommit
मोड है, उद्धृत स्रोतों के अनुसार (जैसे कि kernel.org/doc/Documentation/vm/overcommit-accounting )। मुझे लगता है कि मैं आपके प्रश्न को तदनुसार संपादित करूंगा।