मैं oom_score_adj का उपयोग कैसे करूं?


24

11.04 पर, /proc/[pid]शामिल है oom_score_adj, लेकिन man procपुराने का वर्णन करता है oom_adj। मैं कैसे उपयोग करने के बारे में किसी भी जानकारी के लिए असफल रहा है।

मुझे जो व्यवस्था करने की आवश्यकता है, वह यह है कि 'pbs' या 'ग्रिडेंगिन' द्वारा शुरू की गई प्रक्रियाओं को किसी और चीज के मारे जाने से पहले ही मार दिया जाता है। मैं उसे कैसे कर सकता हूँ?


उपस्टार्ट द्वारा प्रबंधित सेवाओं के लिए यह परिवर्तन स्थायी रूप से करने के लिए: स्थायी रूप से डेमॉन के लिए OOM हत्यारा समायोजन कैसे सेट करें?
gertvdijk

यह पहले से ही एक जवाब है। यह उससे जुड़ता है। :)
gertvdijk

लेकिन इस साइट पर नहीं :-)
bmargulies

जवाबों:


13

इसी तरह के सवाल पर यूनिक्स और लिनक्स पर मेरे अपने प्रश्नोत्तर के आधार पर ।

जैसा कि स्टुअर्ट ने अपने जवाब में कहा है , मान्य मान -1000 से 1000 तक की सीमा में पूर्णांक हैं oom_score_adjकम मूल्य, कम संभावना है कि यह मारे जाने के लिए जा रहा है।

इस मूल्य को बार-बार बदलने के बाद आवेदन को फिर से शुरू करना बहुत असुविधाजनक है। प्रक्रिया समाप्त होने के बाद जानकारी बस खो जाती है। अपस्टार्ट (उबंटू में इनिट डेमॉन), डेमों के लिए कॉन्फ़िगर करने के लिए यह सुनिश्चित करने के लिए एक अच्छा विकल्प है कि यह जब भी शुरू हो (पुन: शुरू हो):

oom score

[...] स्निप [...]

उदाहरण:

# this application is a "resource hog"
oom score 1000

expect daemon
respawn
exec /usr/bin/leaky-app

तो, मूल रूप से, आप उन /etc/init/myservice.confसेवाओं के लिए कॉन्फ़िगरेशन फ़ाइल को संपादित कर सकते हैं जिन्हें आप बदलना चाहते हैं, एक पंक्ति को शामिल करने के लिए oom score -1000। मुझे लगता है कि सेवाओं 'pbs' या 'gridengine' के बारे में जो आप अपने सवाल में बात कर रहे हैं, वह अपस्टार्ट-सक्षम है, अन्यथा आपको इसे स्थायी रूप से बदलने के लिए दूसरे तरीके की आवश्यकता होगी।


7

यदि आप ओमो-किलर को प्राथमिकता देने की प्रक्रिया शुरू करने वाली स्क्रिप्ट को संशोधित कर सकते हैं, तो स्टार्ट स्क्रिप्ट में निम्नलिखित जोड़ें:

echo 1000 > /proc/self/oom_score_adj

मूल्य बाल प्रक्रियाओं के लिए विरासत में मिला है।


6

यदि आप oom_adj या oom_score_adj के लिए उच्च (ish) मान सेट करते हैं तो उन्हें पहले मार दिया जाएगा। जैसे

echo 15 > /proc/[pid]/oom_adj

oom_adj -16 से 15 तक जाता है और जैसा कि ऊपर उल्लेख किया गया है oom_score_adj -1000 से 1000 स्वीकार करता है


ऐसा करने के लिए आपको जड़ होना चाहिए। sudo sh -c "echo -1000 > /proc/[PID]/oom_score_adj"
आदिल

2
दरअसल, आप अपनी प्रक्रियाओं के लिए स्कोर बढ़ा सकते हैं w / o रूट ("हाँ, यह ऊम-मारा जा सकता है")। घटाना (को ०) जड़ की आवश्यकता।
पिस्कवर

5

कोड को देखना हमेशा एक अच्छा विचार होता है। आम तौर पर मैं kernel.org के खोज फ़ंक्शन का उपयोग करता हूं, लेकिन वर्तमान में यह नीचे है। गितुब अच्छा काम भी करता है। मुझे मिला:

इसके बजाय, एक नया ट्यूनेबल, / proc / pid / oom_score_adj, जोड़ा जाता है जो -1000 से +1000 तक होता है। इसका उपयोग हेयुरिस्टिक को ध्रुवीकृत करने के लिए किया जा सकता है जैसे कि कुछ कार्यों को कभी भी ऊम की हत्या के लिए नहीं माना जाता है जबकि अन्य को हमेशा माना जा सकता है। मान सीधे बैजनेस में जोड़ा जाता है () इसलिए -500 का मान स्कोर होता है, उदाहरण के लिए, सिस्टम में या तो अन्य कार्यों की तुलना में इसकी मेमोरी खपत का 50% छूट देने का मतलब है, सीप्यूटिस में, या, एक ही मेमोरी कंट्रोलर साझा करना।

से https://github.com/mirrors/linux-2.6/commit/a63d83f427fbce97a6cea0db2e64b0eb8435cd10#include/linux/oom.h


सूचक के लिए धन्यवाद, लेकिन मैं उम्मीद कर रहा हूं कि कोई व्यक्ति पूरी समस्या के लिए नुस्खा द्वारा चलाएगा और गोली मार देगा, जो किसी भी नौकरी की तलाश करने से पहले इस मूल्य के लिए pbs के निष्पादन डेमॉन के लिए सेट करने की व्यवस्था करता प्रतीत होगा।
bmargulies

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.