क्या क्रोन स्क्रिप्ट बनाना एक बुरा विचार है जो हर घंटे स्वैप को खाली करता है?


26

वर्षों से मुझे अपने छोटे उबंटू विन्यासों के साथ समान समस्या हो रही है: समय के साथ उपयोग की जाने वाली स्वैप स्थान बढ़ जाती है। मुझे यह आभास होता है कि यह मुख्य रूप से है क्योंकि आवंटित मेमोरी कभी भी रैम में नहीं लौटती है, भले ही इसके लिए पर्याप्त स्थान हो, सिवाय उपयोगकर्ता की कार्रवाई के जैसे कि स्वैप को अक्षम करने के मामले में।

मैंने इसे cronस्वचालित करने के लिए एक छोटा कमांड बनाया , और मेरे अच्छे परिणाम हैं:

#! /bin/sh

echo "* */1 * * * root swapoff -a && swapon -a" >> /etc/crontab

लेकिन क्योंकि यह इस समस्या के वास्तविक समाधान की तुलना में अधिक है, इसलिए मैं उन संभावित कारणों के बारे में सोच रहा हूं जो एक बुरा विचार हो सकता है, या मैं इसे थोड़ा और अधिक चतुर बनाने के लिए इस स्क्रिप्ट को कैसे सुधार सकता हूं?


29
मेरी अज्ञानता को क्षमा करें, लेकिन क्या आप वास्तव में अंतरिक्ष स्वैप समय के साथ बढ़ता है और आवंटित स्मृति की रैम को खाली करने का मतलब है ? आम तौर पर आप सिस्टम में स्वैप के रूप में कुछ जगह आवंटित करते हैं और फिर से कभी नहीं सुनते हैं। कौन परवाह करता है कि वास्तव में स्वैप कितना लिया गया है? समस्या क्या है?
मिठाई

5
आप भी ऐसा क्यों करना चाहते हैं? आपको क्यों लगता है कि कुछ स्वैप उपयोग एक बुरी बात है? हम कितने स्वैप उपयोग के बारे में बात कर रहे हैं?
मार्सेल

25
मैं हैरान हूं। आप एक "समस्या" के बारे में बात कर रहे हैं, लेकिन वास्तव में किसी भी तरह के किसी भी नकारात्मक प्रभाव का वर्णन नहीं करते हैं। आप इसे समस्या क्यों मानते हैं?
डेविड श्वार्ट्ज

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

12
यह सिर्फ स्वैप छोड़ने से बेहतर कैसे है?
user253751

जवाबों:


51

इसका इस तरह उपयोग करना: हाँ, बुरा। आपको वास्तव में यह जांचने की आवश्यकता है कि क्या स्वैप बंद करने से पहले पर्याप्त मेमोरी उपलब्ध है। बेहतर संस्करण के लिए /ubuntu//a/90399/15811 देखें ।

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


3
रुको क्या? यदि स्वैपऑफ के सफल होने के लिए पर्याप्त मेमोरी नहीं है, तो स्वैप को ओओएम किलर द्वारा मार दिया जाता है। हां, वे वास्तव में हार्डकोड करते हैं (यह सिस्टम कॉल द्वारा जांचता है)।
जोशुआ

@ जोशुआ ज़रूर लेकिन वह चाहता है कि यह स्वचालित रूप से काम करे। त्रुटि नहीं।
रिनविविंड

4
अपने स्वयं के उत्तर में जाने के बिना विस्तृत करने के लिए, समय के साथ बढ़ते हुए स्वैप का उपयोग करना कोई बुरी बात नहीं है । इसका मतलब यह है कि कर्नेल धीरे-धीरे यह पता लगा रहा है कि मेमोरी का उपभोग करने वाले कबाड़ का उपयोग कभी नहीं किया जा रहा है और इसे स्वैप करने के लिए आगे बढ़ रहा है ताकि स्मृति उन चीजों के लिए उपयोग हो सके जो वास्तव में आपकी मदद करती हैं (जैसे कि अधिक एफएस डेटा को कैश करने में सक्षम होने के कारण। इसे त्यागना नहीं है और इसे डिस्क से पुनः पढ़ना है)।
आर ..

@ रिनविंड क्रॉन नौकरियों में त्रुटि के साथ ठीक काम करता है, और लिंक की गई स्क्रिप्ट का उपयोग नहीं करता है vmstat, या तो।
jpaugh 21

41

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

यदि कोई सक्रिय प्रक्रिया बदली जा रही है, तो आपको जो कुछ भी है उसे ठीक करना चाहिए, जिससे मेमोरी पर दबाव पड़ रहा है। यदि यह एक सक्रिय प्रक्रिया नहीं है, तो बड़ी बात क्या है?


1
+1: क्या बड़ी बात है? कभी भी एक रनिंग सिस्टम को न बदलें , मुझे नहीं लगता कि किसी को सिस्टम के मुख्य कार्यों के साथ गड़बड़ करना चाहिए, खासकर बिना किसी आवश्यकता के।
मिठाई

3
मेरे पास कभी-कभी ऐसे मुद्दे होते हैं जहां मैं एक मेमोरी लीक के साथ एक प्रक्रिया को मारता हूं (जो कि स्वैप में बाकी सबकुछ मजबूर करता है), मुझे छोड़कर ~ 10% रैम का उपयोग किया जाता है ... लेकिन सभी चलने वाले प्रोग्राम स्वैप में हैं जब तक कि मैं उन्हें फिर से एक्सेस नहीं करता। इसलिए हर बार जब आप कुछ छूते हैं, तो दो सेकंड की देरी होती है। मैं देख सकता हूं कि ओपी कहां से आ रहा है, और यह स्वचालित रूप से किया जाना अच्छा होगा, लेकिन यह सही तरीका नहीं है।
कोई

1
@SomeoneSomewhere लेकिन ऐसा नहीं है कि यह कैसे भी काम करता है। यदि प्रक्रिया मेमोरी को लीक कर रही है, तो परिभाषा के अनुसार, यह सक्रिय रूप से उस मेमोरी का उपयोग नहीं कर रहा है (यह इसे नहीं पढ़ और लिख रहा है); यह सिर्फ दुर्घटना द्वारा आवंटित किया गया है। यदि आस-पास अन्य सक्रिय प्रक्रियाएं हैं, तो लीक की गई मेमोरी को स्वैप किया जाएगा और यह आपका स्वैप होगा जो कचरे से भरा है, न कि आपकी भौतिक रैम।
डेविड रिचेर्बी

@DavidRicherby यदि आपको बैकग्राउंड में कोई प्रोग्राम खुला मिला है, तो वह प्रोग्राम अभी भी मेमोरी लीक से कम सक्रिय है - और जब आप इसे वापस स्विच करने जाते हैं, तो इसे स्वैप से बाहर आना होगा।
किसी ने

@SomeoneSomewhere आपको गलतफहमी होने लगती है कि मेमोरी सिस्टम कैसे काम करता है। आपके पास भौतिक रैम में पूरी प्रक्रिया नहीं है: स्वैप को एकल पृष्ठों की ग्रैन्युलैरिटी में प्रबंधित किया जाता है। कोई भी पृष्ठ जिसका उपयोग कुछ समय के लिए नहीं किया गया है उसे बाहर स्वैप किया जा सकता है, और एक पृष्ठ जिसमें पूरी तरह से लीक की गई मेमोरी होती है, उसका दोबारा उपयोग नहीं किया जाएगा, इसलिए इसे स्वैप करने के बाद वापस स्वैप नहीं किया जाएगा।
डेविड रिचेर्बी

34

यह एक बुरा विचार है।

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

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

यदि आप स्पष्ट रूप से प्रतियों को त्याग देते हैं, तो इससे कोई लाभ नहीं होता है, क्योंकि डेटा अभी भी रैम में मौजूद है, लेकिन जब कोई प्रक्रिया बहुत सारी मेमोरी आवंटित करना चाहती है तो आपको गति बढ़ानी पड़ सकती है और स्वैपिंग आवश्यक हो जाती है।

कर्नेल भी हमेशा स्वैप स्थान का उपयोग करेगा जैसे ही भौतिक मेमोरी 50% से ऊपर है, इसलिए यदि आपके पास पर्याप्त मेमोरी स्थापित है, तो भी ये संख्या गैर-शून्य होगी।


4
हमेशा : मुझे लगता है कि आप मान रहे हैं कि /proc/sys/vm/swappinessयह डिफ़ॉल्ट मान पर छोड़ दिया गया है 70, जो सर्वरों के लिए अच्छा है और प्रक्रियाओं से गंदे पन्नों को काफी आक्रामक तरीके से पृष्ठ बनाता है जो कि अधिक पेजकेच के लिए जगह बनाने के लिए कुछ समय के लिए उन्हें छुआ नहीं है। यह अक्सर डेस्कटॉप के लिए खराब होता है क्योंकि ऑल्ट-टैब धीमा हो सकता है।
पीटर कॉर्डेस

@PeterCordes, यदि पृष्ठ वास्तव में निकाले गए हैं, तो कैश में प्रश्न के अनुप्रयोग पृष्ठों की तुलना में अधिक पहुंच देखी गई है, इसलिए इनको डिस्क कैश के रूप में उपयोग करने का शुद्ध लाभ हुआ है। मैं देख सकता हूं कि Alt-Tab का प्रदर्शन उपयोगकर्ता को किसी बड़े प्रोजेक्ट के लिए संकलन समय की तुलना में अधिक दिखाई देता है, लेकिन ऐसी नीति बनाना कठिन लगता है, जो बहुत अधिक प्रदर्शन का त्याग किए बिना त्वरित प्रतिक्रिया की गारंटी देती हो।
साइमन रिक्टर

1
इसे दूसरे तरीके से रखें: कर्नेल को थ्रूपुट ( swappiness=70) के लिए ट्यून किया गया है , लेकिन डेस्कटॉप पर उपयोगकर्ता-अनुभव के लिए विलंबता अधिक महत्वपूर्ण है। यह एक व्यापार है। यदि आप नियमित रूप से उस सामान को संकलित करते हैं जो पेजचे में रहने के लिए थोड़ा बहुत बड़ा है, तो सुनिश्चित करें, swappiness5 या 10 के बजाय 20 या 30 की तरह थोड़ा अधिक छोड़ दें । akitaonrails.com/2017/01/17/optimizing-linux.for भी देखें -स्लो-कंप्यूटरvm.vfs_cache_pressure100 से कम देखकर भी डेटा पेजों पर कैशिंग इनकोड / डायरेक्टरी मेटाडेटा का समर्थन करता है, जो यूआई जवाबदेही के लिए भी अच्छा है।
पीटर कॉर्डेस

1
अन्य ट्यूनल्स : राइट-बैक थ्रेसहोल्ड lonesysadmin.net/2013/12/22/… । ये नियंत्रित करते हैं कि फ़ाइलों पर कुछ लिखने के बाद लिनक्स कितनी जल्दी डिस्क पर लिखना शुरू कर देता है, और कितने गंदे पृष्ठों की अनुमति है। (यानी कैशिंग लिखने पर कितनी मेमोरी खर्च की जा सकती है)
पीटर कॉर्डेस

21

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

आपके पास मूल रूप से दो मामले हैं:

  • स्वैप स्पेस में प्रक्रियाओं का उपयोग वैसे भी नहीं किया जाता है। आप उन्हें रैम में वापस क्यों लाना चाहते हैं?
  • थोड़ी रैम है, इसलिए वे बाहर स्वैप हो जाते हैं और आप उन्हें रैम में वापस खींच लेते हैं। फिर आपका सिस्टम उन्हें जितनी जल्दी हो सके फिर से स्वैप में डाल देगा।

तो दो मुख्य बिंदु हैं:

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

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

यदि आप कर्नेल के व्यवहार को ट्यून करना चाहते हैं, तो स्वप्‍पन पैरामीटर देखें

@ पीटर-कॉर्ड द्वारा योगदान के लिए दो अतिरिक्त स्रोत:

यदि आप वास्तव में खाली स्वैप करना चाहते हैं, तो आप स्वैप को स्थायी रूप से बंद कर सकते हैं। मैं यह नहीं देखता कि एक घंटे तक इस पर रहना और फिर इसे खाली करना स्वैप न होने के फायदे हैं।


1
अधिक ट्यूनिंग सुझावों / विवरणों के लिए akitaonrails.com/2017/01/17/optimizing-linux-for-slow- कंप्यूटर्स और lonesysadmin.net/2013/12/22/… भी देखें ।
पीटर कॉर्डेस

5

आप कर्नेल को कैश मुक्त करने के लिए कहकर समान परिणाम प्राप्त कर सकते हैं:

echo 3 > /proc/sys/vm/drop_caches

इस तरह से आप संभावित मेमोरी भुखमरी के संक्षिप्त क्षण से बचते हैं और कर्नेल तय करते हैं कि क्या आवश्यक है और क्या खारिज किया जा सकता है।


0

अपने आप में सामान्य विचार के विपरीत SWAP खराब नहीं है
जो वास्तव में आपके सिस्टम को धीमा करता है वह कर्नेल गतिविधि है जो डेटा को RAM से SWAP में ले जाती है और RAM में वापस आ जाती है swappiness
सिस्टम इसे स्वचालित रूप से करता है क्योंकि यह इसके साथ कॉन्फ़िगर किया गया है swappiness
यह बनाता है कि निष्क्रिय प्रक्रियाओं से मेमोरी को हार्डडिस्क स्वैप विभाजन में डंप कर दिया जाता है।
मैंने खुद एक ऐसी मशीन के साथ सालों तक काम किया जिसमें इतनी RAM मेमोरी नहीं थी और मेरे पास हमेशा कुछ SWAP मेमोरी का इस्तेमाल होता था। फिर भी मेरी मशीन ने ठीक काम किया जब तक कि आप मेमोरी को रैम में वापस स्थानांतरित करना शुरू नहीं करते, शायद एक खुले एप्लिकेशन को बंद करने की कोशिश करके। फिर वर्क लोड बढ़ने लगा।

  • इसलिए लगातार सफाई करने से आप अपनी मशीन पर काम का बोझ बढ़ा सकते हैं।
  • रनिंग एप्लिकेशन जो SWAP विभाजन पर अपनी मेमोरी रखते हैं, उनके निष्पादन में भ्रष्ट हो सकते हैं।

बल्कि मैं आपको यह सुझाव देना चाहूंगा कि एप्लिकेशन के साथ कमांड लाइन पर कौन सा एप्लिकेशन आपकी मेमोरी का उपयोग करता है htopऔर कुछ एप्लिकेशन को बंद करने का निर्णय लेता है। gnome-system-monitorआप अपनी प्रक्रिया टैब में, साथ ही अच्छा जानकारी दे सकता है।
यदि आपके पास बड़े एप्लिकेशन हैं जो बहुत अधिक रैम का उपयोग करते हैं। इन सबको एक साथ न चलाएं।

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