मुफ्त रैम होने पर स्वैप कैसे खाली करें?

जब मैं एक रैम-गहन ऐप खोलता हूं (वर्चुअलबॉक्स 2 जीबी रैम पर सेट होता है), तो कुछ स्वैप स्पेस आमतौर पर उपयोग किया जाता है, जो उस समय मेरे पास और क्या खुला है ।

हालाँकि, जब मैंने उस अंतिम एप्लिकेशन को छोड़ दिया, तो 2 जीबी रैम मुक्त हो गई, लेकिन वही स्वैप स्पेस उपयोग बना हुआ है ।

उदाहरण के लिए, अभी, वर्चुअलबॉक्स बंद होने के लगभग दो घंटे बाद, मेरे पास 1.6 जीबी मुफ्त रैम है और अभी भी स्वैप में 770 एमबी है ।

मैं उबंटू को उस स्वैप का उपयोग बंद करने और रैम का उपयोग करने के लिए वापस जाने के लिए कैसे कह सकता हूं?

उबंटू में अंतर्निहित लिनक्स कर्नेल स्वचालित रूप से डिस्क से रैम तक उन पृष्ठों को" स्वैप " करेगा, इसलिए सामान्य तौर पर मैं कहूंगा कि इसे स्वाभाविक रूप से होने दें ।

हालांकि, अगर आपको वास्तव में लगता है कि आपको इसे मजबूर करने की आवश्यकता है, (मैं एक परिदृश्य देख सकता हूं जहां आप जानना चाहेंगे कि सिस्टम बाद में उत्तरदायी होगा) आप पल-पल अक्षम और स्वैप को फिर से सक्षम कर सकते हैं

sudo swapoff -asudo swapon -a

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

sudo swapoff -a; sudo swapon -a

ऐसा करने में सावधानी बरतें, क्योंकि आप अपने सिस्टम को अस्थिर बना सकते हैं, खासकर अगर यह पहले से ही रैम पर कम है ।

सिर्फ इसलिए कि स्वैप आवंटित किया गया है, इसका मतलब यह नहीं है कि इसका 'उपयोग'किया जा रहा है । जबकि सिस्टम मॉनिटर और टॉप जैसे प्रोग्राम आपके कुछ स्वैप स्पेस को आवंटित करेंगे (आपके उदाहरण 770 एमबी में) इसका मतलब यह नहीं है कि सिस्टम सक्रिय रूप से/बाहर स्वैप कर रहा है ।

यह जानने के लिए कि क्या कुछ अंदर / बाहर गमागमन कर रहा है, आप इसका उपयोग कर सकते हैं vmstat कमान। इसे कुछ सेकंड चलने के लिए छोड़ दें और देखें si (स्वैपिन) और so (स्वैप) कॉलम। अगर कुछ नहीं हो रहा है तो चिंतित होने का कोई कारण नहीं है ।

यहाँ चलने का उत्पादन है vmstat 1, जहां आप देख सकते हैं कि मेरी मशीन बिल्कुल भी स्वैप नहीं कर रही है ।

procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu---- r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa 0  0  78588 230788   9596  72196    0    0     0     0  543  652 12  6 78  0 0  0  78588 230780   9596  72196    0    0     0     0  531  410  1  0 99  0 0  0  78588 230796   9596  72196    0    0     0     0  300  335  1  1 97  0 1  0  78588 230788   9608  72224    0    0    40     0  737  762  4  4 84  8 5  0  78588 230788   9608  72224    0    0     0     0  415  385  9  3 84  0 0  0  78588 230540   9616  72224    0    0     0    44  611  556 55  5 31  0 0  0  78588 230532   9616  72224    0    0     0     0  574  662  1  6 89  0

अभी तक यहाँ में top आप देख सकते हैं कि मेरे पास स्वैप स्पेस आवंटित है:-

Mem:    475236k total,   245076k used,   230160k free,     9720k buffersSwap:   491512k total,    78588k used,   412924k free,    72476k cached

आप 60 के डिफ़ॉल्ट से अपना "स्वैपनेस" मान भी सेट कर सकते हैं, इस तरह स्वैप शुरू करने के लिए इतना बड़ा नहीं होगा । शिपिंग डिफ़ॉल्ट को 60 पर सेट क्यों किया जाता है जब अनुशंसित मान मुझे 10 हैरान करता है । उबंटू स्वैपफैक से:

उबंटू में डिफ़ॉल्ट सेटिंग स्वैपनेस=60 है । स्वैपनेस के डिफ़ॉल्ट मान को कम करने से संभवतः एक विशिष्ट उबंटू डेस्कटॉप इंस्टॉलेशन के लिए समग्र प्रदर्शन में सुधार होगा । स्वैपनेस=10 का मान अनुशंसित है, लेकिन बेझिझक प्रयोग करें ।

इस मान को 10 या 0 में बदलकर, आप धीमी ड्राइव के साथ पुराने सिस्टम में एक महत्वपूर्ण और विचारशील गति को बढ़ा सकते हैं । इस मान को 0 पर सेट करने से लिनक्स कर्नेल 3.4 और उससे नीचे के लिए स्वैप बंद नहीं होता है, लेकिन 3.5+ के साथ ऐसा होता है कि आप 1 के मान का उपयोग करना चाहेंगे यदि आप इसे इसकी सबसे कम सेटिंग*पर रखना चाहते हैं ।

मुझे कोई कारण नहीं दिखता कि इसे 0 पर सेट न करें क्योंकि डिस्क को हिट करने वाली कोई भी चीज रैम की तुलना में धीमी है । मेरे पास 8 वर्चुअल कोर, एक तेज़ एसएसडी और 8 जीबी मेमोरी है और मेरा स्वैप 0 पर सेट है । इस पल के रूप में मेरे पास 3 वर्चुअल मशीनें चल रही हैं, मेरी मेमोरी का उपयोग 7.1 का 7.7 जीबी है, मेरा उपयोग स्वैप केवल 576 केबी 952 एमबी पर है और सभी सिस्टम सुचारू रूप से चल रहे हैं!

उबंटू स्वैपफैक से:

स्वैपनेस पैरामीटर भौतिक मेमोरी से बाहर और स्वैप डिस्क पर प्रक्रियाओं को स्थानांतरित करने के लिए कर्नेल की प्रवृत्ति को नियंत्रित करता है । क्योंकि डिस्क रैम की तुलना में बहुत धीमी होती है, इससे सिस्टम और एप्लिकेशन के लिए धीमी प्रतिक्रिया समय हो सकता है यदि प्रक्रियाएं बहुत आक्रामक रूप से मेमोरी से बाहर चली जाती हैं ।

  1. स्वैपनेस का मान 0 से 100 के बीच हो सकता है
  2. स्वैपनेस=0 कर्नेल को यथासंभव लंबे समय तक भौतिक मेमोरी से स्वैपिंग प्रक्रियाओं से बचने के लिए कहता है
  3. स्वैपनेस = 100 कर्नेल को भौतिक मेमोरी से प्रक्रियाओं को आक्रामक रूप से स्वैप करने और उन्हें कैश स्वैप करने के लिए स्थानांतरित करने के लिए कहता है

स्वैपनेस की जाँच करने, अपने स्वैप को खाली करने और स्वैपनेस को 0 में बदलने के लिए बुनियादी निर्देश नीचे दिए गए हैं:

स्वैपनेस वैल्यू की जांच करने के लिए:

cat /proc/sys/vm/swappiness

अस्थायी रूप से स्वैप को 0 पर सेट करने के लिए (जैसा कि स्पैमैप्स द्वारा सुझाया गया है):

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

sudo swapoff --all

नया मान 0 पर सेट करने के लिए:

sudo sysctl vm.swappiness=0 

स्वैप को वापस चालू करने के लिए:

sudo swapon --all

स्वैपनेस को स्थायी रूप से 0 पर सेट करने के लिए:

  1. sudoedit /etc/sysctl.conf
  2. इस लाइन को जोड़ें vm.swappiness = 0
  3. sudo shutdown -r now # सिस्टम को पुनरारंभ करें

* कर्नेल संस्करण 3.5 + के साथ स्वैपनेस को 0 पर सेट करना इसे पूरी तरह से बंद कर देता है और यदि आप सबसे कम स्वैपनेस एल्गोरिदम चाहते हैं तो 1 की सेटिंग की सिफारिश की जाती है । स्रोत: https://www.percona.com/blog/2014/04/28/oom-relation-vm-swappiness0-new-kernel/

मैंने पाया है कि स्वैप खाली करने से धीमी डिस्क और सीमित रैम वाले सिस्टम पर बहुत मदद मिल सकती है । बेशक, जैसा कि पहले ही बताया गया है, ऐसा करने का तरीका चलाना है sudo swapoff -a; sudo swapon -a. यहां समस्या यह है कि यदि अपर्याप्त रैम है, तो ऐसा करने से सभी प्रकार की समस्याएं होंगी ।

मैंने एक स्क्रिप्ट लिखी है जिसे मैं कहता हूं toggle_swap यह मेरे लिए पिछले कई सालों से काम कर रहा है । यह वास्तव में स्वैप को अक्षम करने से पहले पर्याप्त मुफ्त रैम की जांच करता है । यहाँ यह है:

#!/bin/bashfree_data="$(free)"mem_data="$(echo "$free_data" | grep 'Mem:')"free_mem="$(echo "$mem_data" | awk '{print $4}')"buffers="$(echo "$mem_data" | awk '{print $6}')"cache="$(echo "$mem_data" | awk '{print $7}')"total_free=$((free_mem + buffers + cache))used_swap="$(echo "$free_data" | grep 'Swap:' | awk '{print $3}')"echo -e "Free memory:\t$total_free kB ($((total_free / 1024)) MB)\nUsed swap:\t$used_swap kB ($((used_swap / 1024)) MB)"if [[ $used_swap -eq 0 ]]; then    echo "Congratulations! No swap is in use."elif [[ $used_swap -lt $total_free ]]; then    echo "Freeing swap..."    sudo swapoff -a    sudo swapon -aelse    echo "Not enough free memory. Exiting."    exit 1fi

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

जब तक आपके पास उस डिस्क को वापस चाहने का वास्तव में अच्छा कारण नहीं है, मैं इसे छोड़ दूंगा ।

यदि आपका स्वैप स्थान व्याप्त है तो यह प्रदर्शन को प्रभावित नहीं करता है । एकमात्र प्रदर्शन जुर्माना है सामान स्वैप के अंदर/बाहर जा रहा है । अगर कुछ भी स्वैप नहीं किया जा रहा है/स्वैप आउट किया गया है, तो आपको कुछ भी चिंता नहीं करनी है ।

बड़ी धारणा है कि आपके कंप्यूटर पर सभी सामानों को फिर से खोलने में इससे कम समय लगता है ।

उबंटू 16.04, कम से कम, स्वैप का उपयोग लंबे समय तक कर सकता है क्योंकि इसकी आवश्यकता थी, इस प्रकार स्वैप फ़ाइल पर भरोसा करके आपके सिस्टम के आदेशों को धीमा कर दिया गया, भले ही अब कोई आवश्यकता न हो । मैनुअल हस्तक्षेप इसलिए उपयोगी द्वारा कर सकते हैं । रिबूट करना हमेशा एक विकल्प नहीं होता है ।

सबसे आसान बात अपने डिवाइस को रिबूट करें और रैम और फ्री रैम से मुकाबला करने का समय बचाएं लैपटॉप और सीपीयू तापमान की शक्ति बचाएं