सवाल यदि फ्री रैम है तो स्वैप कैसे खाली करें?


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

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

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

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


256
2017-08-06 06:43


मूल


सबसे आसान बात अपने डिवाइस को रीबूट करें और रैम और फ्री रैम को लैपटॉप और सीपीयू तापमान की बचत करने के समय को बचाने का समय बचाएं - Mohamed Slama
बड़ी धारणा है कि आपके कंप्यूटर पर सभी चीजों को दोहराने से उसमें कम समय लगता है। - jQwierdy


जवाब:


सिर्फ इसलिए कि स्वैप आवंटित किया गया है, इसका मतलब यह नहीं है कि इसका उपयोग किया जा रहा है। जबकि सिस्टम मॉनीटर और टॉप जैसे प्रोग्राम आपके कुछ स्वैप स्पेस आवंटित किए जाएंगे (आपके उदाहरण 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 buffers
Swap:   491512k total,    78588k used,   412924k free,    72476k cached

146
2017-08-06 10:04



"चिंतित होने का कोई कारण नहीं", उस बिंदु तक जब मैं कुछ एप्लिकेशन का उपयोग करना जारी रखता हूं जो बाहर निकल गया था। तो सभी नरक टूट जाता है। - törzsmókus
यह पोस्ट प्रश्न का उत्तर नहीं देती है। - emchristiansen
प्रश्न का आधार गलत धारणाओं पर आधारित है। यह पोस्ट गलत धारणाओं को संबोधित करता है। - popey
मुझे एक गलतफहमी दिखाई नहीं दे रही है, मुझे "इस्तेमाल" के बारे में असहमति दिखाई देती है। सक्रिय रूप से इन्हें "आउट" के रूप में संदर्भित करने के लिए आपका उपयोग "प्रयुक्त" है, जबकि मूल प्रश्न "प्रयुक्त" के साथ प्रतीत होता है जिसका अर्थ है कि वहां डेटा बदल दिया गया है, जिसे बाद में वापस बदलने की आवश्यकता हो सकती है। एक ऐसी घटना के बाद स्वैप को फ्लश करना चाहते हैं, जो कई अन्य मेमोरी को स्वैप कर देता है, अनिवार्य रूप से उस सक्रिय स्वैपिंग को पूर्व-खाली करने के बाद जिसे उपयोगकर्ता जानता है बाद में होगा (विशेष रूप से यदि बाद में 'डी-स्वैपिंग' होने की संभावना है अन्य कारणों से डिस्क लोड हो रही है)। - drfrogsplat
मेमोरी गहन अनुप्रयोग चलाने के बाद, जब मैं उन पर स्विच करता हूं, तो मेरे अन्य अनुप्रयोग अपरिवर्तनीय होते हैं, संभवतः स्वैप होने के कारण। जितना संभव हो उतना डेटा अन-स्वैप करने के लिए सिस्टम को बताने का कुछ तरीका (कॉफी ब्रेक के बाद) प्रत्येक बार जब मैं Alt + Tab का इंतजार कर रहा हूं तो 20s प्रतीक्षा करना बेहतर होगा। - Mark K Cowan


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

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

sudo swapoff -a
sudo swapon -a

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

swapoff -a && swapon -a

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


348
2017-08-06 06:47



यह चाल है, स्वैप राम को कॉपी किया गया था। मुझे लगता है कि आपको केवल स्वैप चलाने से पहले फ्री रैम के रूप में उपयोग की जाने वाली स्वैप की मात्रा सुनिश्चित करने की आवश्यकता है, है ना? - jfoucher
स्वैप रैम पर कॉपी नहीं किया गया था। यह केवल अक्षम था। आपको यह सुनिश्चित करना चाहिए कि यह करने से पहले बॉक्स स्वैपिंग नहीं कर रहा है। यदि आप करते हैं, तो कर्नेल स्मृति को गायब कर देगा और ओओएम-किलर शायद मनमाने ढंग से अनुप्रयोगों को मारना शुरू कर देगा। ऐसा कोई कारण नहीं है कि आपको इस तरह स्वैप को 'साफ' करने की आवश्यकता हो। (मेरी दूसरी टिप्पणी देखें) :) - popey
असल में स्वैप, मूल रूप से, रैम की प्रतिलिपि बनाई जाती है, या अधिक सटीक रूप से, स्वैप अक्षम होने से पहले पृष्ठों को डिस्क से रैम में वापस बदल दिया जाता है। - SpamapS
पृष्ठों को केवल तभी कॉपी किया जाता है जब उन्हें किसी प्रक्रिया द्वारा अभी भी आवश्यकता हो। कभी-कभी एक स्वैप किया गया पृष्ठ उस प्रक्रिया से संबंधित होता है जो पहले ही समाप्त हो चुका है, और कर्नेल इन पृष्ठों को तुरंत स्वैप से हटाने की परवाह नहीं करता है। - BrunoJCM
यह सही जवाब होना चाहिए, क्योंकि यह स्वैप किए गए पृष्ठों को रैम पर वापस लाने का तरीका है और फिर स्वैप मेमोरी खाली करें - Alfonso Jiménez


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

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

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

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

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

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

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

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

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

cat /proc/sys/vm/swappiness

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

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

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/


119
2018-06-11 14:10



यह स्वीकार्य उत्तर होना चाहिए। - quant
मैंने बस स्वैप सेट करने के लिए एक स्थायी तरीका शामिल करने के उत्तर को अद्यतन किया। यह सुनिश्चित नहीं है कि यह कितना ऊंचा हो गया, मुझे लगता है कि किसी ने इसका परीक्षण नहीं किया है। - Elijah Lynn
इस उत्तर => में swappiness पर और अच्छी पढ़ाई askubuntu.com/a/103916/11929 - Elijah Lynn
लिनक्स कर्नेल संस्करण 3.5+ के साथ बदलकर swappiness = 0 के व्यवहार के बारे में एक नोट जोड़ा गया। - Elijah Lynn
मुझे यकीन नहीं है कि यह तब उपलब्ध था जब लेखक मूल रूप से उत्तर पोस्ट करते थे लेकिन उबंटू सर्वर इंस्टॉल के लिए "60" का एक स्वभाव मूल्य स्थापित होता है क्योंकि उस वातावरण में प्रदर्शन के लिए विनिर्देशों का एक अलग सेट होता है। help.ubuntu.com/community/... - Frito


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

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

#!/bin/bash

free_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 -a
else
    echo "Not enough free memory. Exiting."
    exit 1
fi

46
2017-12-25 16:35



यह वास्तव में सहायक था, धन्यवाद! - Luke Cousins
हे, यह सबसे अच्छा समाधान है। धन्यवाद! - Fabio A. Correa
बहुत बढ़िया मैं इस तरह कुछ ढूंढ रहा था। हो सकता है कि थोड़ा सुरक्षित हो, आप संख्या और प्रतिशत पेश कर सकते हैं और फिर पूछ सकते हैं, बस पूरी तरह से सुनिश्चित हो सकते हैं। - Atherion
मैंने कोड अपडेट किया है और एक गिस्ट आधारित बनाया है gist.github.com/Jekis/6c8fe9dfb999fa76479058e2d769ee5c - Jekis
यह निष्कर्ष है कि मैं सभी युक्तियों को पढ़ने के बाद पहुंचा, जैसे कि किसी को भी यह सुनिश्चित करना चाहिए कि स्वैप को मारने से पहले पर्याप्त रैम है। धन्यवाद सर, अद्भुत लिपि। डिफ़ॉल्ट रूप से उबंटू में शामिल किया जाना चाहिए (मजाक नहीं, यह वास्तव में एक musthave है।) - Shiki


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

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


23
2017-08-06 16:34



मेरे पास स्वैप में कुछ चीजें थीं, vmstat ने मुझे दिखाया कि स्वैपिन और स्वैपआउट हो रहा था, और क्रोम बहुत दूर था, जबकि मेरा सीपीयू मुश्किल से इस्तेमाल किया गया था। अच्छा पर्याप्त कारण, नहीं? - Xerus


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


1
2017-08-11 19:35



हाँ लेकिन अगर कुछ है है इसे बदल दिया जा रहा है कर देता है प्रदर्शन को प्रभावित करते हैं, इसलिए यह सवाल है। - quant