क्या ओम्-किलर को जबरन स्वैपिंग पर ट्रिगर करना संभव है?


26

क्या यह संभव है कि सिस्टम प्रीमेच्युअल रूप से निष्क्रिय पेजों ( vm.swappiness) को स्वैप कर सकता है , लेकिन जब सिस्टम रैम से बाहर चला जाता है (स्मृति से बाहर चलने का विरोध किया जाता है) तो ओम-किलर को इनवॉइस करें और स्वैप करने के लिए मजबूर किया जाता है?

अंतिम लक्ष्य यह है कि सिस्टम को प्रमुख पृष्ठ दोषों के कारण डिस्क को थ्रैश करना शुरू करने से रुकने तक रोक दिया जाए, लेकिन फिर भी निष्क्रिय पृष्ठों को बाहर निकलने दिया जाए।

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

ऐसा लगता नहीं है कि ऐसा करना मुश्किल होगा। ऐसा लगता है जैसे आप सिस्टम को एक्स रे उपयोग / मुफ्त होने पर ट्रिगर करने के लिए ऊम-हत्यारा बता सकते हैं। लेकिन यह मैं क्यों पूछ रहा हूं; मुझे नहीं पता।

स्पष्टीकरण के लिए, मैं स्वैप को बंद करने या vm.swappinessपैरामीटर को समायोजित करने के लिए नहीं देख रहा हूं


3
दिलचस्प रूप से पर्याप्त है, यह तब भी होता है जब कोई स्वैप फ़ाइल नहीं होती है। इसके बजाय, आसानी से पढ़ने वाली मेमोरी मैप की गई फाइलें (जैसे एक्जीक्यूटिव, लाइब्रेरी, शायद ग्राफिक रिसोर्स) को स्वैप किया जाता है।
WGH

फेसबुक का oomd एक यूजर-स्पेस डेमॉन है, जिसे समग्र सिस्टम थ्रूपुट (यानी, केवल थ्रैशिंग) पर आधारित प्रक्रियाओं को मारने के लिए डिज़ाइन किया गया है। लेकिन यह डेस्कटॉप / कार्यस्थानों के लिए सेट करने के लिए बहुत जटिल लगता है (जो शायद cgroups या कंटेनरों में कार्य नहीं कर रहे हैं)।
जेफरी बोसबोम

जवाबों:


22

मैंने उस मुद्दे पर भी संघर्ष किया। मैं बस चाहता हूं कि मेरी प्रणाली उत्तरदायी रहे, चाहे कुछ भी हो, और मैं कुछ मिनट प्रतीक्षा करने के लिए प्रक्रियाओं को खोना पसंद करता हूं। ऐसा लगता है कि कर्नेल ऊम हत्यारे का उपयोग करके इसे प्राप्त करने का कोई तरीका नहीं है।

हालाँकि, यूजर स्पेस में हम जो चाहें कर सकते हैं। इसलिए मैंने अर्ली ओओएम डेमन ( https://github.com/rfjakob/earlyoom ) लिखा जो एक बार उपलब्ध रैम 10% से नीचे चला जाता है (आरएसएस द्वारा) सबसे बड़ी प्रक्रिया को मार देगा।

शुरुआती समय के बिना, http://www.unrealengine.com/html5/ कुछ समय शुरू करके मेरी मशीन (8GB RAM) को लॉक करना आसान हो गया है । अब, दोषी ब्राउज़र टैब हाथ से निकलने से पहले ही मारे जाते हैं।


1
धन्यवाद, ठीक यही मैं देख रहा था। मैं अब column -t -s,कुछ बड़ी सीएसएसवी फाइलों को चालू रख सकता हूं और earlyoomजब यह संभव नहीं हो तो इसे मार सकता हूं , इससे पहले कि कोई गैर-जिम्मेदाराना नोटिस न दे।
हेनफिन

4

यह एक विस्तृत समाधान की तरह लगता है। मैं सुझाव देता हूं (और मैं इसे उन मशीनों पर करता हूं जिन्हें मैंने सेटअप किया है जो हाइबरनेट करने की आवश्यकता नहीं है) बस स्वैप स्पेस की थोड़ी मात्रा (128-256MiB) आवंटित करें। इस तरह से कर्नेल कुछ पृष्ठों को स्वैप कर सकता है, लेकिन चीजों के खराब होने से पहले OOM- किलर को आमंत्रित किया जाता है।

यदि आप वास्तव में ऐसा करना चाहते हैं, तो मुझे लगता है कि आपको अपनी स्क्रिप्ट / प्रोग्राम लिखना होगा जो स्वैप उपयोग की निगरानी करता है और जादू SysReq कुंजी का उपयोग करके ओओएम -हत्यारा को आमंत्रित करता है (जो कि प्रोग्रामेटिक रूप से लिखकर किया जा सकता है /proc/sysrq-trigger)।


1
मैं यह दलील दूंगा कि छोटा स्वैप एक बहुत ही सुंदर समाधान नहीं है। आप मूल रूप से अपने स्वैप की उपयोगिता को सीमित करते हैं। क्या होगा यदि आपके पास बहुत सारे निष्क्रिय पृष्ठ हैं और 10 जीबी स्वैप होने से लाभ होगा? मैं ~ 100gb के साथ बक्से है RAM जहाँ 10gb स्वैप एक दूर का विचार नहीं है। और यूजरस्पेस में ऐसा करने के लिए एक आवेदन लिखना सिर्फ समस्याओं के लिए खुला है (मूल रूप से कर्नेल में तुलना में)।
पैट्रिक

क्योंकि तब आपको अनिवार्य रूप से "खराब स्वैपिंग" से "अच्छे स्वैपिंग" को भेद करने के लिए एक तंत्र की आवश्यकता होती है, और यह एक कठिन एल्गोरिदम है। स्वैप की मात्रा जो कि स्पष्ट रूप से उचित है, रैम की मात्रा और आपके द्वारा चलाए जा रहे कार्यभार पर निर्भर करती है, इसलिए यदि 10GiB आपकी मशीनों के लिए उपयुक्त है, तो उसे आवंटित करें :-)
mgorven

क्यों मुश्किल होगा? केवल 2 प्रकार के स्वैप होते हैं, प्रीमेप्टिव स्वैप जिसकी वजह से vm.swappinessऔर राम से बाहर निकलने के कारण मजबूर स्वैपिंग होता है। जब कर्नेल को स्वैप करने के लिए मजबूर किया जाता है, तो ऊम-हत्यारे को ट्रिगर करने की आवश्यकता होती है। और 10 जीबी डिस्क को थ्रैश करने के लिए मजबूर स्वैपिंग के लिए टन का स्थान भी छोड़ देता है।
पैट्रिक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.