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


314

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

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

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

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


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

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

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

जवाबों:


167

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

यह जानने के लिए कि क्या कुछ भी स्वैप हो रहा है / बाहर आप 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

32
"चिंतित होने का कोई कारण नहीं है", इस बिंदु तक जब मैं कुछ एप्लिकेशन का उपयोग करना जारी रखता हूं जिसे स्वैप किया गया था। तब सभी नरक ढीले हो जाते हैं।
törzsmókus

207
यह पोस्ट प्रश्न का उत्तर नहीं देती है।
इमच्रिस्तिनसेन

18
प्रश्न का आधार गलत धारणाओं पर आधारित है। यह पोस्ट गलत धारणाओं को संबोधित करती है।
पोप

30
मुझे कोई ग़लतफ़हमी नहीं दिख रही है, मुझे इस बात पर असहमति है कि "उपयोग" का क्या अर्थ है। आप सक्रिय रूप से स्वैपिंग / इन-आउट का संदर्भ देने के लिए "उपयोग" कर रहे हैं, जबकि मूल प्रश्न "प्रयुक्त" अर्थ के साथ प्रकट होता है, जिसका अर्थ है कि बाहर स्वैप किए गए डेटा है, जिसे बाद में वापस स्वैप करने की आवश्यकता हो सकती है। मान्य कारणों के बाद स्वैप को फ्लश करने के लिए चाहते हैं, जो कि अन्य मेमोरी का एक बहुत स्वैप करता है, अनिवार्य रूप से सक्रिय स्वैपिंग को पूर्व-खाली करना जो उपयोगकर्ता जानता है कि बाद में होगा (विशेषकर यदि बाद में 'डी-स्वैपिंग' के दौरान होने की संभावना है) डिस्क अन्य कारणों से लोड के अधीन है)।
drfrogsplat

39
मेमोरी इंटेंसिव एप्लिकेशन चलाने के बाद, मेरे अन्य एप्लिकेशन अप्रतिसादी होते हैं जब मैं उन्हें स्विच करता हूं, संभवतः स्वैप होने के कारण। सिस्टम को अन-स्वैप करने का कुछ तरीका जितना संभव हो उतना डेटा (इसके बाद एक कॉफी ब्रेक के बाद) स्वैप करने से बेहतर होगा कि मैं हर बार 20 ऑल्ट + टैब का इंतजार करूं।
मार्क के कोवान

423

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

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

sudo swapoff -a
sudo swapon -a

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

swapoff -a; swapon -a

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


8
उस चाल को, स्वैप राम को कॉपी किया गया था। मुझे लगता है कि आपको बस यह सुनिश्चित करने की ज़रूरत है कि स्वैफ़ चलाने से पहले कम से कम स्वैप की कितनी मात्रा मुक्त राम के रूप में उपयोग की जाए?
jfoucher

12
स्वैप को RAM में कॉपी नहीं किया गया था। यह केवल विकलांग था। ऐसा करने से पहले आपको यह सुनिश्चित करना चाहिए कि बॉक्स स्वैप नहीं कर रहा है। यदि आप करते हैं, तो कर्नेल मेमोरी को गायब हो जाएगा और ओओएम-किलर शायद मनमाने ढंग से अनुप्रयोगों को मारना शुरू कर देगा। कोई कारण नहीं है कि आपको स्वैप को इस तरह से 'साफ़' करने की आवश्यकता है। (मेरी अन्य टिप्पणी देखें) :)
popey

51
वास्तव में स्वैप, मूल रूप से, राम की नकल, या अधिक सटीक रूप से होता है, स्वैप अक्षम होने से पहले पृष्ठों को डिस्क से रैम में वापस स्वैप किया जाता है।
SpamapS

14
पृष्ठों को RAM में केवल तभी कॉपी किया जाता है, जब उन्हें किसी प्रक्रिया की आवश्यकता होती है। कभी-कभी एक स्वैप किया गया पृष्ठ उस प्रक्रिया से संबंधित होता है जो पहले ही समाप्त हो चुका होता है, और कर्नेल इन पृष्ठों को स्वैप से तुरंत हटाने की परवाह नहीं करता है।
ब्रूनो जेसीएम

6
यह सही उत्तर होना चाहिए, क्योंकि यह स्वैप किए गए पृष्ठों को रैम में वापस लाने का तरीका है और फिर स्वैप मेमोरी को खाली करना है
अल्फांसो जिमेनेज

144

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

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

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

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

Ubuntu SwapFAQ से :

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

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

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

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

cat /proc/sys/vm/swappiness

अस्थायी तौर पर स्वैप को 0 पर सेट करें ( जैसा कि SpamapS द्वारा सुझाया गया है ):

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

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/


1
मैंने सिर्फ स्वैग सेट करने के लिए एक स्थायी तरीका शामिल करने के उत्तर को अपडेट किया है। यह सुनिश्चित नहीं है कि यह कैसे बढ़ गया, मुझे लगता है कि किसी ने भी इसका परीक्षण नहीं किया है।
एलिजा लिन

1
इस उत्तर में स्वपनदोष पर अधिक अच्छा पढ़ना => askubuntu.com/a/103916/11929
एलिजा लिन

3
मुझे यकीन नहीं है कि यह तब उपलब्ध था जब लेखक ने मूल रूप से उत्तर पोस्ट किया था, लेकिन "60" का एक स्वैच्छिकता मूल्य ubuntu सर्वर इंस्टॉल के लिए है, क्योंकि उस वातावरण में प्रदर्शन के लिए विनिर्देशों का एक अलग सेट है। help.ubuntu.com/community/…
Frito

1
यह सेटिंग स्वैप के आकार को नियंत्रित करने में बहुत प्रभावी है। मेरे सिस्टम में 16G रैम और 16G स्वैप है। कभी-कभी मैं VMs में चला जाता हूं और मेरे कुछ एप्लिकेशन स्वैप हो जाते हैं। जब मैं VMs को RAM उपयोग बंद कर देता हूं, लेकिन स्वैप का उपयोग समान रहता है और एप्लिकेशन बदलते समय मेरा सिस्टम खराब हो जाता है। स्वैग बदलने से मेरे लिए प्रदर्शन में सुधार हुआ है।
kapad

1
यह वास्तव में स्वीकृत उत्तर होना चाहिए। समस्या की पूरी व्याख्या, और यह समाधान है, साथ ही लिंक और एक समाधान स्वैप मेमोरी को बनाए रखने के लिए, लेकिन इसे पहले स्थान पर नियंत्रण में रखने में मदद करें। अद्भुत सामान। धन्यवाद। :)
जैक_हु

53

मैंने पाया है कि स्वैपिंग खाली करने में धीमी डिस्क और सीमित रैम वाले सिस्टम पर बहुत मदद मिल सकती है। बेशक, जैसा कि पहले ही उल्लेख किया गया है, ऐसा करने का तरीका चलाना है 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

बहुत बढ़िया मैं कुछ इस तरह की तलाश में था। शायद थोड़ा सुरक्षित होने के लिए आप संख्या और प्रतिशत प्रस्तुत कर सकते हैं और फिर पूछ सकते हैं, बस बिल्कुल सुनिश्चित होने के लिए।
एथेरियन

2
मैंने कोड अपडेट कर लिया है और एक जिस्ट
Jekis

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

सिवाय इसके कि अगर आप स्वैप बंद करते समय कोई भी नई चीज़ चलाते हैं, और इससे पहले कि वह वापस आ जाए - इसमें पर्याप्त मेमोरी नहीं होगी।
barteks2x

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

25

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

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


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

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

-1

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


10
हाँ, लेकिन अगर किसी चीज़ की अदला-बदली की जा रही है , तो इससे प्रदर्शन प्रभावित होता है , इसलिए यह सवाल है।
मात्रा

यह कुछ वास्तविक बकवास है, आमतौर पर बड़ा कमबैक स्वैप HDDs पर या आमतौर पर RAM की तुलना में धीमे डिवाइस पर होता है - यदि अंतरिक्ष बाहर निकलता है - मौजूदा सामान जैसे कि इंटरनेट ब्राउज़र - स्वैप किया जाता है और फिर आप व्यावहारिक रूप से धीमे डिवाइस से इसका उपयोग कर रहे हैं। ..
jave.web
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.