स्थायी रूप से डेमॉन के लिए OOM किलर समायोजन कैसे सेट करें?


12

कुछ या केवल कुछ महत्वपूर्ण सिस्टम सेवा डेमॉन के साथ कुछ लिनक्स सर्वर चलाने पर, मैं उन विषम प्रक्रियाओं के लिए OOM हत्यारे को समायोजित करना चाहूंगा, अगर कुछ अजीब होता है। उदाहरण के लिए, आज MySQL चलाने वाले कुछ उबंटू सर्वर को एक मार डाला गया MySQL डेमॉन मिला क्योंकि टनों apt-checkerप्रक्रियाएं सभी मेमोरी का उपभोग कर रही थीं और कर्नेल ने सोचा कि यह MySQL को मारने के लिए एक अच्छा विचार है।

मुझे पता है कि मैं /proc/$(pidof mysqld)/oom_score_adjकर्नेल को कुछ सुराग देने के लिए फाइल का उपयोग करके स्कोर को समायोजित कर सकता हूं मैं नहीं चाहता कि MySQL को मार दिया जाए, फिर भी वह सेवा को पुनरारंभ नहीं करता है। क्या मुझे इन समायोजन को शामिल करने के लिए पैकेज से init / upstart स्क्रिप्ट्स को संपादित करना चाहिए? मुझे नहीं लगता कि यह एक बहुत ही सुंदर समाधान है क्योंकि मैं एक पैकेज से संबंधित फाइलों में समायोजन करूंगा। क्या सामान्य रूप से अपस्टार्ट / इनिट स्क्रिप्ट को हुक करना और सशर्त रूप से इसे समायोजित करना संभव होगा? या आप अनिश्चितकालीन स्क्रिप्ट चलाने का सुझाव देंगे while true{ adjust_oom(); sleep 60;}?


दिलचस्प है कि वहाँ समायोजित करने की संभावना है। मुझे लगता है कि नौकरी को पूरा करने के लिए आपके अनंत लूप से बेहतर कुछ नहीं है। OOM- किलर को कर्नेल के अंदर गहरे दफन किया गया है और इसमें बहुत ही अस्पष्ट एल्गोरिथ्म है।
निल्स

जवाबों:


8

कई आधुनिक d .mon पर्यवेक्षण प्रणाली के पास ऐसा करने के लिए एक साधन है। (वास्तव में, के बाद से वहाँ नौकरी के लिए एक श्रृंखला लोड हो रहा है उपकरण है, यकीनन वे सब ऐसा करने के लिए एक साधन है।)

  • अपस्टार्ट:oom score नौकरी फ़ाइल में उपयोग करें ।
    ऊम स्कोर -500
  • systemd:OOMScoreAdjust= सेवा इकाई में सेटिंग का उपयोग करें । प्री-पैकेज्ड सर्विस यूनिट को प्रभावित करने के लिए आप सर्विस यूनिट पैच फाइल का उपयोग कर सकते हैं।
    [सेवा] 
    OOMScoreAdjust = -500
  • डेमोंटोल्स परिवार : सेवा के लिए कार्यक्रमoom-kill-protectमें नोश टूलसेट से उपकरण काउपयोग करेंrun

    यदि आप एक सिस्टम सेवा इकाई को परिवर्तित कर रहे हैं, तो convert-systemd-unitsउपकरण वास्तव में OOMScoreAdjust=सेटिंग को ऐसे मंगलाचरण में बदल देगा oom-kill-protect

    #! / बिन / नोश 
    ...
    ऊम-मार-रक्षा -500
    ...
    कार्यक्रम तर्क
    एक बोनस के रूप में, आप इसे पैरामीटर बना सकते हैं:
    ऊँ-मार-रक्षा - fromenv
    और सेवा के वातावरण में पैरामीटर का मान सेट करें (सेवा से जुड़े एक एनवायर से पढ़ा जाना माना जाता है, यहाँ nosh टूलसेट के rcctlशिम के साथ हेरफेर किया गया है ):
    rcctl सेट SERVICENAME oomprotect -500

आगे की पढाई

  • जोनाथन डी बॉयने पोलार्ड (2016)। oom-kill-protect। nosh टूलसेट। सॉफ्टवेयर्स।
  • जेम्स हंट और क्लिंट बाय्रम (2014)। " oom score"। अपस्टार्ट कुकबुक
  • लेन्नर्ट पोइटरिंग (2013-10-07)। " OOMScoreAdjust"। systemd.exec। systemd मैनुअल पेज। freedesktop.org।
  • जोनाथन डी बॉयने पोलार्ड। rcctl। nosh टूलसेट। सॉफ्टवेयर्स।
  • /unix//a/409454/5132

9

उपस्टार्ट और oom scoreकॉन्फ़िगरेशन विकल्प का उपयोग करके उबंटू में यह संभव है ।

oom score

लिनक्स में "आउट ऑफ़ मेमोरी" किलर सुविधा है। [...]

आम तौर पर OOM किलर सभी प्रक्रियाओं को समान रूप से मानता है, यह श्लोक कर्नेल को इस कार्य को अलग तरीके से व्यवहार करने की सलाह देता है।

इस श्लोक को प्रदान किया गया "समायोजन" मूल्य -999 से एक पूर्णांक मान (ओओएम हत्यारे द्वारा मारे जाने की संभावना नहीं) 1000 तक हो सकता है (ओओएम हत्यारे द्वारा मारे जाने की बहुत संभावना है)। [...]

उदाहरण:

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

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

Ubuntu 16.04+ का उपयोग करने वाले पाठकों के लिए, यह अब अप्रचलित हो गया है कि उपस्टार्ट को सिस्टमड द्वारा बदल दिया गया है।
gertvdijk

4

आप इसे MySQL में ही हैक कर सकते हैं (उदाहरण के लिए OpenSSH sshdयह करता है), फिर भी यह थोड़ा बहुत कट्टर और बहुत गंदा है (अपडेट के बाद समस्या आदि)।

आप इसे एक आवरण या init स्क्रिप्ट में कर सकते हैं - स्कोर विरासत में मिला होना चाहिए (और एक आवरण में आप शायद exec mysqld "$@"वैसे भी करना चाहते हैं )।

उपयोग cgroups- यह आपको थोड़ा अधिक लचीलापन देगा और इसे इस अर्थ में स्थायी बनाया जा सकता है कि सेवा पुनः आरंभ करने पर उपयुक्त सेटिंग्स को स्वचालित रूप से लागू किया जा सकता है। अधिक जानकारी के लिए cgroups का उपयोग करके अनुप्रयोगों की प्राथमिकता को नियंत्रित करने वाले उदा देखें । आप जिस स्वचालितता की तलाश कर रहे हैं, उसे प्राप्त करने के लिए, आप शायद libcgroup पर एक नज़र डालना चाहते हैं , जिसमें एक डेमन होता है जो नियमों के एक सेट के अनुसार मक्खी पर चलने की प्रक्रिया के cgroups को बदल सकता है, या बस cgexecआवरण (स्वचालित) का उपयोग कर सकता है उसी पैकेज से)।

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