"सबसे बड़ी प्रक्रिया को मार डालो" बटन


14

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


क्या आपका मतलब है "सबसे बड़ी प्रक्रिया को मारना" कमांड?
रमेश

लिनक्स में यह है। इसे OOM किलर कहा जाता है। लेकिन आपको मेमोरी ओवरकॉम्पिट को सक्षम करना होगा (और यह अधिकांश डिस्ट्रोस में डिफ़ॉल्ट रूप से है)।
पैट्रिक

@ पैट्रिक overcommit_memoryहै 0, overcommit_ratioहै 50
रिएक्टॉर्मोंक

जवाबों:


12

आपकी टिप्पणी से, ऐसा लगता है कि सिस्टम सिर्फ स्वैप कर रहा है।

लिनक्स में एक OOM किलर है, जिसे तब लगाया जाता है जब सिस्टम ने मेमोरी को ओवरकम कर दिया है, और अब बाहर चला गया है।
लिनक्स बाय डिफॉल्ट मेमोरी ओवरकमिट करता है, जिसका मूल अर्थ है कि यह प्रोग्राम को वास्तव में सिस्टम की तुलना में अधिक मेमोरी देता है। यह इस धारणा पर करता है कि प्रोग्राम वास्तव में उन सभी मेमोरी का उपयोग नहीं करेंगे जो वे पूछते हैं। हालाँकि जब सिस्टम मेमोरी से बाहर चला जाता है, तो यह पहले से ही चल रही विभिन्न प्रक्रियाओं को बताता है कि उनके पास मेमोरी है, इसलिए यह इसे और अधिक अस्वीकार नहीं कर सकता है। इसके बजाय यह क्या करता है कि OOM हत्यारे को आमंत्रित करना है। ओओएम हत्यारा मूल रूप से एक प्रक्रिया पाता है जो कर्नेल को लगता है कि स्मृति की स्थिति को समाप्त कर देगा। आमतौर पर यह केवल स्मृति की सबसे अधिक मात्रा का उपयोग करने वाली प्रक्रिया है, लेकिन एल्गोरिथ्म वास्तव में इससे कहीं अधिक जटिल है।

जब से आपने (स्वचालित मोड) में overcommit_memoryसेट किया है 0, कर्नेल मेमोरी ओवरकॉमिट कर रहा है। तो आपके समझाए गए व्यवहार से, ऐसा लगता है कि सिस्टम सिर्फ ज़ोर से स्वैप कर रहा है।

यहां से 2 विकल्प हैं।

स्वैप कम करें

आपका सिस्टम RAM से बाहर चल रहा है, और इसलिए कर्नेल चीजों को स्वैप करना शुरू कर देता है। यदि आपका सिस्टम स्वैप से बाहर चला जाता है, तो यह OOM किलर को आमंत्रित करता है। हालाँकि जब से आपने मुक्त स्वैप स्थान शेष रखा है, ऐसा नहीं होता है।

आपका मूल विचार, मैन्युअल रूप से एक प्रक्रिया को मारता है।

आप मैन्युअल रूप से एक प्रक्रिया को मार सकते हैं जब आपको लगता है कि सिस्टम बहुत अधिक स्वैप कर रहा है और कुछ को मरने की आवश्यकता है। यह कर्नेल SysRq ट्रिगर के माध्यम से किया जा सकता है।

कर्नेल के पास "मैजिक सिक्रक" है। यह कार्यक्षमता का एक सा है जो कर्नेल को कुछ प्रकार के आपातकालीन ऑपरेशन करने के लिए कहता है। यह "रीमाउंट ऑल वॉल्यूम रीड-ओनली", "सिंक ऑल फाइलसिस्टम", या "रिबूट नाउ" जैसी चीजें हो सकती हैं। इनमें से एक विकल्प OOM किलर को लागू करना भी है।

यदि आपके कर्नेल में जादू SysRq सक्षम (कर्नेल विकल्प CONFIG_MAGIC_SYSRQ) है, तो आप इसे 2 तरीकों से कर सकते हैं।

  1. Alt+ SysRq+ f
    बस कीबोर्ड पर इन 3 कुंजियों को दबाएं।
  2. echo f > /proc/sysrq-trigger
    यह कीबोर्ड विधि के समान सटीक कार्य करेगा, लेकिन प्रोग्राम के अनुसार ऐसा करता है।

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

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


मुझे OOM किलर के बारे में नहीं पता था। मैं एक स्क्रिप्ट के बारे में सोच रहा था जो लगातार मेमोरी कमांड का उपयोग करके topया psकमांड का उपयोग करता है और यदि यह कुछ सीमा सीमा से अधिक है, तो कमांड का उपयोग करके उस प्रक्रिया को मार देता है kill
रमेश

मैं किसी भी स्वैप का उपयोग नहीं करता।
रिएक्टॉर्मोंक

यह देखने के लिए कि grep -E "oom-killer|Killed process" /var/log/syslog /var/log/syslog.1
ऊम

@ टॅस ओह, मैंने पूरी तरह से "मैं ने स्वैग से कम करने का फैसला किया" टिप्पणी पर खेद व्यक्त किया, क्षमा करें :-(। हालांकि "मैन्युअल रूप से एक प्रक्रिया को मारना" जानकारी अभी भी खड़ी है। हालांकि स्मृति से बाहर चलने पर आपको धीमेपन का अनुभव नहीं करना चाहिए। कर्नेल को सिर्फ चीजों को मारने का अनुभव करना चाहिए।
पैट्रिक

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