Google पर देखा, और ऐसा कुछ भी नहीं पाया जिससे समझाया जा सके कि स्कोर proc/<pid>/oom_score
की गणना कैसे की जाती है। केवल उपयोग की गई कुल मेमोरी का उपयोग करने के बजाय इस स्कोर का उपयोग क्यों करें?
Google पर देखा, और ऐसा कुछ भी नहीं पाया जिससे समझाया जा सके कि स्कोर proc/<pid>/oom_score
की गणना कैसे की जाती है। केवल उपयोग की गई कुल मेमोरी का उपयोग करने के बजाय इस स्कोर का उपयोग क्यों करें?
जवाबों:
उस समय के कार्यान्वयन के लिए गोल्डविन रोड्रिग्स के 2009 के लेख , जोनाथन कॉर्बेट के 2010 के लेख को मैं वर्तमान व्यवहार और भविष्य के परिवर्तनों के बारे में विचारों के लिए जोनाथन कॉर्बेट के 2013 के लेख के लिए देखता हूं ।
2010 के लेख से:
डेविड के पैच सेट में, पुरानी खराबता () आंकड़े पूरी तरह से लगभग चले गए हैं। इसके बजाय, गणना एक सरल प्रश्न में बदल जाती है कि उपलब्ध मेमोरी का कितना प्रतिशत प्रक्रिया द्वारा उपयोग किया जा रहा है। यदि एक पूरे के रूप में सिस्टम मेमोरी की कमी है, तो "उपलब्ध मेमोरी" सिस्टम में उपलब्ध सभी रैम और स्वैप स्पेस का योग है। यदि, इसके बजाय, OOM स्थिति किसी दिए गए cpuset / नियंत्रण समूह को दी गई मेमोरी को समाप्त करने के कारण होती है, तो "उपलब्ध मेमोरी" उस नियंत्रण समूह को आवंटित कुल राशि है। एक समान गणना की जाती है यदि मेमोरी पॉलिसी द्वारा लगाई गई सीमाएं पार हो गई हैं। प्रत्येक मामले में, प्रक्रिया के मेमोरी उपयोग को इसके निवासी सेट (रैम पेजों की संख्या का उपयोग करना) और इसके स्वैप उपयोग का योग माना जाता है।
यह गणना परिणाम के रूप में प्रतिशत-दस-दस संख्या पैदा करती है; एक प्रक्रिया जो कि उपलब्ध मेमोरी के हर बाइट का उपयोग कर रही है, उसका स्कोर 1000 होगा, जबकि बिना मेमोरी का उपयोग करने वाली प्रक्रिया को शून्य का स्कोर मिलेगा। इस स्कोर के लिए बहुत कम अनुमानी मोड़ हैं, लेकिन कोड अभी भी इस धारणा पर रूट-स्वामित्व वाली प्रक्रियाओं के स्कोर से एक छोटी राशि (30) घटाता है कि वे उपयोगकर्ता-स्वामित्व वाली प्रक्रियाओं की तुलना में थोड़ा अधिक मूल्यवान हैं।
एक अन्य ट्वीक जो लागू किया जाता है वह प्रत्येक प्रक्रिया के oom_score_adj चर में संग्रहीत मूल्य को जोड़ना है, जिसे इस खरीद के माध्यम से समायोजित किया जा सकता है। यह नॉब यूजर स्पेस में OOM किलर को प्रत्येक प्रक्रिया के आकर्षण के समायोजन की अनुमति देता है; इसे -1000 पर सेट करना OOM को पूरी तरह से मार देगा, जबकि +1000 पर सेट करना संबंधित प्रक्रिया पर एक बड़े लक्ष्य को पेंट करने के बराबर है।