रिहा स्वैप स्थान


10

कई बार कर्नेल को स्वैप में उदाहरण के तौर पर रखने का इरादा होता है, भले ही पर्याप्त शारीरिक मेमोरी उपलब्ध हो और मैं फ़ायरफ़ॉक्स का उपयोग कर रहा हूँ:

robert@rm:~> free -m
             total       used       free     shared    buffers     cached
Mem:          3009       1904       1104          0        109        679
-/+ buffers/cache:       1116       1892
Swap:         4102        885       3216

क्या कर्नेल को स्वैप स्थान छोड़ने और उपलब्ध मुफ्त मेमोरी का उपयोग करने का निर्देश देने के लिए एक आदेश है?


अद्यतन : हालांकि अल्पावधि में मैंने स्वेपॉन / स्वैफ़ॉफ़ का उपयोग किया है, अब मैं सेट करता हूं

sudo sysctl vm.swappiness=30

जैसा कि एक अन्य प्रतिक्रिया में सुझाया गया है, और बहुत अच्छे परिणाम मिलते हैं।

जवाबों:


2

आप कर सकते हैंswapoff - को रूट विशेषाधिकारों की आवश्यकता होगी,
लेकिन, मुझे लगता है कि आपके लिए कोई समस्या नहीं है।


15

तुम क्या nik सुझाव दिया और स्वैप का उपयोग कर सकते हैं । हालाँकि, "स्वप्नदोष" को ट्वीक करने का एक और अधिक सुंदर तरीका है, या कैसे कर्नेल स्वैप सिस्टम को 2.6 kernels चलाने वाले सिस्टम में डिस्क से बाहर करता है।

लाइननेल कर्नेल मेलिंग सूचियों पर गर्म बहस चल रही है कि कर्नेल को स्वैपिंग व्यवहार के बारे में नीति का पालन करना चाहिए । उतावलापन यह है कि अब हमारे पास 2.6 गुठली में एक पैच है जो हमें इस व्यवहार को काफी हद तक मोड़ देता है।

ध्यान दें कि ऐसा करने के लिए आपको रूट विशेषाधिकारों की आवश्यकता होती है, जैसा कि आप स्वैपऑफ / स्वेपन कमांड को चलाने के लिए करेंगे।

"स्वैप्पीनेस" के वर्तमान मूल्य का निरीक्षण / प्रोक / एसआईएस / वीएम / स्वैपीनेस फाइल में किया जा सकता है , या इस sysctl कमांड को चलाकर :

sudo sysctl vm.swappiness

"स्वैपीनेस" मान 0 (बिना स्वैपिंग) से लेकर 100 तक (स्वैप जितना संभव हो डिस्क तक ) हो सकता है। उबंटू जहाजों के साथ डिफ़ॉल्ट स्वैप्पीपन 60 पर सेट है।

सत्र के लिए इसे बदलने के लिए, फिर से sysctl को कॉल करें और इसे उपयोग करने के लिए एक स्वैग्मेंटेशन मान पास करें:

sudo sysctl vm.swappiness=30

नि: शुल्क के अलावा , आप निश्चित रूप से उत्कृष्ट htop या iotop उपयोगिताओं के माध्यम से ऐसा करने के प्रभावों की निगरानी कर सकते हैं।

यदि आप जो देखते हैं उसे पसंद करते हैं, और रिबूट के पार इस मान को बनाए रखना चाहते हैं, तो बस /etc/sysctl.conf फ़ाइल में "vm.swappiness = 30" रखें

$ sudo sysctl vm.swappiness
vm.swappiness = 30
$ sudo sysctl vm.swappiness=40
vm.swappiness = 40
$ sudo sysctl vm.swappiness
vm.swappiness = 40
$ sudo tail /etc/sysctl.conf 
#net.ipv4.conf.all.accept_source_route = 0
#net.ipv6.conf.all.accept_source_route = 0
#
# Log Martian Packets
#net.ipv4.conf.all.log_martians = 1
#
# The contents of /proc/<pid>/maps and smaps files are only visible to 
# readers that are allowed to ptrace() the process
# kernel.maps_protect = 1
vm.swappiness=30

आप अलग-अलग मूल्यों के साथ खेल सकते हैं जब तक कि आप एक ऐसा नहीं पाते हैं जो आपके मशीन पर स्वैप करने के स्वीकार्य स्तर को पूरा करता है।


Sysctl के लिए +1। स्वैग के विभिन्न मूल्यों के साथ प्रयोग करते समय, आप सीधे proc फाइल (echo "30"> / proc / sys / vm / swappiness) को लिख सकते हैं। यह परिवर्तन अस्थायी है और /etc/sysctl.conf में नहीं लिखेगा। एक बार जब आप सेटिंग्स से खुश हो जाते हैं, तो 'स्थायी' परिवर्तन करने के लिए sysctl का उपयोग करें।
शॉन चिन

6

याद रखें कि स्वैप में सामान अब की तुलना में एक व्यस्त समय पर वहाँ रखा गया था।

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

इसे डिलीट-ऑन-राइट आधार पर प्रबंधित किया जाता है, इसलिए यदि रैम में कॉपी को अपडेट किया जाता है तो स्वैप में ब्लॉक जारी किया जाएगा।

यदि स्वैप स्पेस की आवश्यकता किसी और चीज के लिए है, जो कि इस समय नहीं होगी, क्योंकि आपके पास बहुत से मुफ्त हैं, तो यह निश्चित रूप से उस उपयोग के लिए जारी किया जाएगा।

आप यह नहीं देख सकते हैं कि इस स्थिति में कितना डेटा है (स्वैप क्षेत्रों में डिस्क-आधारित पृष्ठों में और RAM में) दोनों में free। आप इसे /procविशेष फाइल सिस्टम के माध्यम से देख सकते हैं । गिनती के cat /proc/meminfoलिए आउटपुट देखें SwapCached

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

  • जब भारी I / O लोड के तहत कर्नेल ने निर्णय लिया है कि जिन पृष्ठों का उपयोग उम्र के लिए नहीं किया गया है, उन्हें बेहतर रूप से स्वैप किया जाता है, इसलिए यह कैश / बफ़र्स के लिए RAM का उपयोग कर सकता है, हालांकि आपके freeआउटपुट को देखते हुए कि शायद आपके यहाँ ऐसा नहीं है। वास्तव में असंबद्ध रैम का एक हिस्सा है और साथ ही साथ IO कैश / बफ़र्स द्वारा उपयोग किया जाता है।
  • पहले किसी कारण से पृष्ठों की अदला-बदली की गई थी, और बस फिर से ज़रूरत नहीं थी - शायद यह एक प्रक्रिया द्वारा उपयोग में स्मृति है जो कुछ समय के लिए निष्क्रिय हो गई है। इस मामले में स्वैप जारी करना (इसलिए पृष्ठों को रैम में वापस लोड करना) उस प्रक्रिया की प्रतिक्रिया समय में सुधार कर सकता है अगली बार नींद के अलावा कुछ करने की आवश्यकता है, लेकिन अगर यह कुछ समय के लिए निष्क्रिय हो गया है तो पहले से ही इसकी आवश्यकता नहीं हो सकती है। वैसे भी निकट भविष्य में किसी भी समय।

1
एक उत्कृष्ट स्पष्टीकरण के लिए +1। FYI करें, vmstat आपको यह सब नहीं के माध्यम से डेटा / proc / meminfo देखने देता है।

1

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

इसके अतिरिक्त, आप यह जांचना चाहते हैं कि आपके पास ulimit के माध्यम से निर्धारित अधिकतम निवासी आकार पर प्रतिबंध नहीं है (आमतौर पर / etc / प्रोफ़ाइल में) लेकिन शायद यह वितरण के साथ बदलता रहता है और इसे प्रति-प्रक्रिया (जैसे एक लॉन्च स्क्रिप्ट में) सेट किया जा सकता है )।

अंत में, Microsoft विंडोज पर फ़ायरफ़ॉक्स को डिस्क से स्वैप करने के लिए विशिष्ट मुद्दों की रिपोर्टें हैं, उदाहरण के लिए जब कम से कम (जैसे) http://joeabiraad.com/mozilla-firefox/control-your-firefox-ram-usage/113 )। मैंने GNU / Linux सिस्टम पर इसके बारे में नहीं सुना है लेकिन यह खोज के लायक हो सकता है।


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