यदि मेमोरी को प्रक्रियाओं द्वारा आसानी से उपयोग किया जाता है, तो इस हद तक जो संभवतः सिस्टम की स्थिरता को खतरे में डाल सकता है, तो ओओएम हत्यारा तस्वीर में आता है।
ध्यान दें: जब तक कि कर्नेल को चलाने का प्रयास नहीं किया जाता है, तब तक शेष प्रक्रिया के सुचारू संचालन के लिए पर्याप्त मेमोरी मुक्त होने तक ओओएम किलर का कार्य करना है।
OOM किलर को मारने के लिए सबसे अच्छी प्रक्रिया (तों) का चयन करना है । बेस्ट यहां उस प्रक्रिया को संदर्भित करता है जो हत्या पर अधिकतम मेमोरी को मुक्त कर देगा और सिस्टम के लिए कम से कम महत्वपूर्ण भी है।
प्राथमिक लक्ष्य कम से कम प्रक्रियाओं को मारना है जो नुकसान को कम करता है और साथ ही साथ मुक्त की गई मेमोरी की मात्रा को अधिकतम करता है।
इसे सुविधाजनक बनाने के लिए, कर्नेल oom_score
प्रत्येक प्रक्रिया के लिए बनाए रखता है। आप डायरेक्टरी के तहत फाइल सिस्टम oom_score
की प्रत्येक प्रक्रिया को देख सकते हैं ।/proc
pid
$ cat /proc/10292/oom_score
oom_score
किसी भी प्रक्रिया का मूल्य जितना अधिक होता है, ऊम किलर द्वारा एक आउट-ऑफ-मेमोरी स्थिति में मारे जाने की संभावना अधिक होती है।
OOM_Score
गणना कैसे की जाती है?
डेविड के पैच सेट में, पुरानी ख़राबता () आंकड़े पूरी तरह से लगभग चले गए हैं। इसके बजाय, गणना एक सरल प्रश्न में बदल जाती है कि प्रक्रिया द्वारा उपलब्ध मेमोरी का कितना प्रतिशत उपयोग किया जा रहा है। यदि एक पूरे के रूप में सिस्टम मेमोरी से कम है, तो "उपलब्ध मेमोरी" सिस्टम में उपलब्ध सभी रैम और स्वैप स्पेस का योग है।
यदि इसके बजाय, OOM स्थिति किसी दिए गए cpuset / नियंत्रण समूह को दी गई मेमोरी को समाप्त करने के कारण होती है, तो "उपलब्ध मेमोरी" उस नियंत्रण समूह को आवंटित कुल राशि है। एक समान गणना की जाती है यदि मेमोरी पॉलिसी द्वारा लगाई गई सीमाएं पार हो गई हैं। प्रत्येक मामले में, प्रक्रिया का मेमोरी उपयोग इसके निवासी सेट (रैम पेजों की संख्या का उपयोग कर रहा है) और इसके स्वैप उपयोग का योग माना जाता है।
यह गणना परिणाम के रूप में प्रतिशत-दस-दस संख्या पैदा करती है; एक प्रक्रिया जो कि उपलब्ध मेमोरी के प्रत्येक बाइट का उपयोग कर रही है, उसका स्कोर 1000 होगा, जबकि बिना मेमोरी का उपयोग करने वाली प्रक्रिया को शून्य का स्कोर मिलेगा। इस स्कोर के लिए बहुत कम अनुमानी मोड़ हैं, लेकिन कोड अभी भी इस धारणा पर रूट-स्वामित्व वाली प्रक्रियाओं के स्कोर से एक छोटी राशि (30) घटाता है कि वे उपयोगकर्ता-स्वामित्व वाली प्रक्रियाओं की तुलना में थोड़ा अधिक मूल्यवान हैं।
एक अन्य ट्वीक जो लागू किया जाता है वह प्रत्येक प्रक्रिया के oom_score_adj चर में संग्रहीत मूल्य को जोड़ना है, जिसे इस खरीद के माध्यम से समायोजित किया जा सकता है। यह नॉब यूजर स्पेस में OOM किलर को प्रत्येक प्रक्रिया के आकर्षण के समायोजन की अनुमति देता है; इसे -1000 पर सेट करना OOM को पूरी तरह से अक्षम कर देगा, जबकि +1000 पर सेट करना संबंधित प्रक्रिया पर एक बड़े लक्ष्य को पेंट करने के बराबर है।
संदर्भ
http://www.queryhome.com/15491/whats-happening-kernel-starting-killer-choose-which-process
https://serverfault.com/a/571326