उबंटू को जमने से रोकें, भले ही सिस्टम मेमोरी कम हो


24

कभी-कभी मैं डेटा के विशाल डंप के साथ काम करता हूं जिसे मैं प्रसंस्करण के लिए स्मृति में रखना चाहता हूं। कभी-कभी मैं अपने प्रोग्राम का उत्पादन करने वाली मेमोरी की मात्रा को मिसकॉल करता हूं, या कोई डिबगर मेमोरी के उपयोग को एक ऐसे कारक द्वारा गुणा करता है जो मेरी उपलब्ध मेमोरी से अधिक हो।

जब भी मैं एक मेमोरी-भूखी प्रक्रिया शुरू करता हूं, तो यही वह चीज होती है जो मैं एक सॅन ऑपरेटिंग सिस्टम से उम्मीद करता हूं: सभी मुफ्त मेमोरी खाने की कोशिश करें, फिर कुछ अन्य गैर-जरूरी प्रक्रियाओं को अच्छी तरह से कुछ स्मृति देने के लिए कहें, जिनकी उन्हें आवश्यकता नहीं है, फिर स्वैप करने के लिए लिखें।

यहां मेरे लिए उबंटू क्या करता है: सभी मुफ्त मेमोरी खाएं, फिर ऑपरेटिंग सिस्टम को सभी आवश्यक सेवाओं (सूक्ति सत्र, टर्मिनल, कीबोर्ड) को स्वैप करने के लिए कहें, फिर फ्रीज करें और पावर प्लग खींचने के लिए मेरी प्रतीक्षा करें।

दो सवाल:

  1. एक ऑपरेटिंग सिस्टम कैसे मान सकता है, कि कुछ भी इतना महत्वपूर्ण हो सकता है कि उपयोगकर्ता इनपुट को सुनने से रोकना ठीक है?
  2. मैं उबंटू को कैसे बता सकता हूं कि आवश्यक सेवाओं को कभी भी स्वैप न करें और हमेशा उपयोगकर्ता इनपुट पर प्रतिक्रिया करें, भले ही कुछ बेवकूफ प्रक्रिया सिस्टम द्वारा प्रदान किए गए संसाधनों से अधिक खाने की कोशिश करें।

आपने कितनी RAM स्थापित की है? आपके स्वैप का आकार क्या है (टर्मिनल में, swaponयह पता लगाने के लिए)? चीयर्स, अल
हेनेनमे सेप

3
16 जीबी रैम और 16 जीबी स्वैप। लेकिन यह यहाँ की बात नहीं है, इस समस्या को अधिक मेमोरी जोड़कर हल नहीं किया जा सकता है।
क्लेमन

1
एक दो चीजों की कोशिश करो। 1) swappinessसेटिंग को 10 पर बदलें , अर्थात: vm.swappiness = 10/etc/sysctl.conf में। इसके बारे में अधिक जानकारी के लिए स्वैग के लिए यहां खोजें। 2) अगर स्वप्नदोष मदद नहीं करता है ... भले ही आप नहीं करना चाहते ... अपने स्वैफाइल का आकार बढ़ाकर 1.5x16G करें और देखें कि क्या मदद करता है। मुझे तैनात रखें। चीयर्स, अल
हेनेमा

1
@ क्लेमन मैं सहमत हूं कि अधिक स्वैप जोड़ने से समस्या ठीक नहीं होगी। एक बार जब आप एक टूटे हुए प्रोग्राम का उपभोग करते हैं तो सभी RAM + SWAP को जोड़कर अतिरिक्त SWAP केवल अपरिहार्य हो जाता है।
विनयुनुच्स

1
@ WinEunuuchs2Unix, जैसा कि मैंने कहा, vm.swappiness=10होने की जरूरत है जोड़ा sysctl.conf करने के लिए। एक अनुभवी व्यक्ति भी sysctl.conf फ़ाइल को संपादित किए बिना vm.swappiness = 10 सेट करने के लिए, मक्खी पर sysctl कमांड का उपयोग कर सकता है। चीयर्स, अल ps: ओपी के जवाब के लिए इंतजार कर रहा है।
Heynnema

जवाबों:


5

मेरे पास अभी भी समस्या का हल नहीं है, लेकिन मैं दो वर्कअराउंड की पेशकश कर सकता हूं, जो दूसरों के लिए फायदेमंद हो सकते हैं:

1) शुरुआती

यही कारण है कि एक सेवा है जो स्मृति के उपयोग देखता है और प्रक्रिया है कि खपत सबसे स्मृति जब एक निश्चित सीमा से पहुँच जाता है (यह भी देखें मारता है है इस और इस लिनक्स कर्नेल में OOM किलर के बारे में प्रश्न)

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

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

2) बस स्वैप अक्षम करें

मुझे पता है कि यह एक विवादास्पद विषय है , लेकिन डेस्कटॉप सिस्टम और विशेष रूप से विकास मशीनों के उद्देश्य से जहां यह समय-समय पर हो सकता है कि एक प्रक्रिया आपकी सभी मेमोरी को खाने की कोशिश करती है, यह समझ में आता है: स्वैप के बिना, ओओएम हत्यारा सिर्फ काम करता है जैसा सोचा वैसा। जब आप स्मृति से बाहर निकलते हैं, तो उसे मारने और उससे छुटकारा पाने की सबसे अच्छी प्रक्रिया मिल जाती है। कोई अंतराल नहीं, कोई देरी नहीं।

आप वर्तमान सत्र के लिए स्वैप को अक्षम कर सकते हैं sudo swapoff -aया परिवर्तन को स्थायी बना सकते हैं


समस्या का उचित समाधान यह होगा कि मुख्य मेमोरी ख़राब होने पर सिस्टम रिस्पॉन्सिबल रहे और यह मेमोरी को स्वैप करना शुरू कर दे, जैसे कल नहीं है, लेकिन ऐसा लगता है कि जल्द ही ऐसा नहीं होगा।


1
मैंने स्वैप अक्षम कर दिया है और मेरा सिस्टम कम मेमोरी (<100MB) से सीधे ठंड में चला जाता है। मैं कैसे बता सकता हूं कि अगर OOM किलर एक्चुएल सक्षम है?
माइकल

0

दो चीजों में से एक का प्रयास करें:

1) स्वैच्छिकता सेटिंग को 60 की डिफ़ॉल्ट सेटिंग से बदलकर 10 करें, अर्थात: vm.swappiness = 10 को /etc/sysctl.conf (टर्मिनल में टाइप करें sudo gedit /etc/sysctl.conf) में जोड़ें, फिर सिस्टम को रिबूट करें। इसके बारे में अधिक जानकारी के लिए स्वैग के लिए यहां खोजें।

2) अगर स्वप्नदोष मदद नहीं करता है ... भले ही आप नहीं करना चाहते ... अपने स्वैफाइल का आकार बढ़ाकर 1.5x16G करें और देखें कि क्या मदद करता है।

मुझे तैनात रखें। चीयर्स, अल


मैंने कुछ परीक्षण चलाने के लिए एक वीएम सेट किया है, क्योंकि मेरे ओएस को हर कुछ सेकंड में रिबूट करने से वास्तव में कष्टप्रद हो गया। उबंटू 16.04, 2 जीबी रैम, 3 जीबी स्वैप, 20 जीबी डिस्क। फिर मैंने एक स्क्रिप्ट चलाई जो बहुत सारी मेमोरी खाती है: डिफ़ॉल्ट स्वैप्पीनेस (60) के साथ, सिस्टम फ्रीज हो जाता है और कुछ मिनटों के बाद, मैंने इसे बंद कर दिया क्योंकि रिकवरी का समय अस्वीकार्य था। Swappiness 10 के साथ, सिस्टम कुछ सेकंड के लिए जमा देता है, फिर यह इनपुट स्वीकार करता है, लेकिन आप किसी भी प्रक्रिया को शुरू नहीं कर सकते हैं (जैसे topमेमोरी हॉग को मारने के लिए)। एक-एक मिनट के बाद यह प्रक्रिया मारी जाती है। सही नहीं है, लेकिन हम करीब हो रहे हैं।
कालमन्न

हमें जानकारी देते रहिए। VM वास्तव में आपके वास्तविक जीवन में काम करने वाले OS का अनुकरण नहीं करेगा, लेकिन यह आपको सेटिंग्स के साथ खेलने देगा। मैं उत्सुक हो जाऊंगा अगर स्वप्नदोष आपकी समस्या के साथ मदद करता है। चीयर्स, अल
हेनेनेमा सेप

आह अच्छा। प्रगति! स्वप्नदोष पर थोड़ा पढ़ें। आप मूल्य के साथ थोड़ा खेल सकते हैं। चीयर्स, अल
हेनीमेमा सेप

सिस्टम के जमने पर कितना स्वैप इस्तेमाल हो रहा था? चीयर्स, अल
हेनीमेमा सेप

2
क्यों, इसमें क्या बात है? अगर मैं उस मेमोरी को चूस भी लूं, तो अधिक मेमोरी न जाने से सिस्टम को अटकने से रोका जा सकता है।
कल्मन्न

0

मैंने एक ऐसी ही समस्या का समाधान किया। मुझे नहीं पता कि मेरा अनुभव शायद आपके लिए उपयुक्त है ...

हाल ही में मैंने USB से बूट करने वाले लूपबैक एलवीएम उपकरणों पर लिनक्स को स्थापित करने के तरीके पर एक गाइड प्रकाशित किया है (इसलिए बिना आंतरिक डिस्क पर ग्रब स्थापित करने के लिए, इसे मूल के रूप में छोड़कर)। यहाँ गाइड है: https://github.com/DareDevil73/linux-on-loopback-usb

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

मैंने एक वैकल्पिक समाधान की कोशिश की। मैंने एक स्वैप लूपबैक फ़ाइल (LVM नहीं) बनाई है और फ्रीज चला गया है। अब स्वैप फाइल का उपयोग वैसे ही किया जाएगा जैसा कि होगा, और OS कभी भी फ्रीज नहीं होगा!

कृपया गहरी जानकारी प्राप्त करने के लिए https://github.com/DareDevil73/linux-on-loopback-usb#ogn-issues पर देखें


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