लिनक्स: स्पष्ट रूप से सबकुछ कैसे संभव है?


59

मैंने कुछ ऐसा लॉन्च किया है जिसमें बहुत सारी मेमोरी लगी है और अब सब कुछ बहुत कम हो गया है। मुझे लगता है कि स्मृति-गहन प्रक्रिया के लिए कुछ स्थान खाली करने के लिए सभी अनुप्रयोगों की मेमोरी स्वैप करने के लिए चली गई है, और अब सब कुछ धीरे-धीरे रैम में वापस आ रहा है जब एक्सेस किया जाता है।

वहाँ एक तरीका है स्पष्ट रूप से स्वैप से RAM तक सब कुछ संभव है? या शायद सब कुछ नहीं, लेकिन सिर्फ कुछ विशेष प्रक्रिया डेटा?

जवाबों:


59

मैं सामान्य लिनक्स मेमोरी कंट्रोल स्वैप को उन चीजों में अनुमति देने की सलाह दूंगा जो वास्तव में उपयोग की जाती हैं, जैसे वे उपयोग की जाती हैं।

केवल एक चीज जिसे मैं बंद कर सकता हूं, वह है अदला-बदली फिर से चालू करना

sudo swapoff -a
sudo swapon -a

यह मान लें कि आपके पास स्वैप में सब कुछ सम्‍मिलित करने के लिए पर्याप्‍त भौतिक स्‍मृति है ...


4
यह काम करता है, बहुत धीरे से हालांकि :) धन्यवाद! लेकिन फिर भी मेरा मानना ​​है कि एक और अधिक सुंदर समाधान है :)
kolypto

7
इस समाधान के साथ सावधानी से, यह सब कुछ स्वैप से जबरन बाहर ले जाएगा ... यदि यह भौतिक स्मृति में फिट नहीं होता है, तो कर्नेल घातक OOM हत्यारा शुरू करेगा। मैं किसी भी अच्छे के बारे में नहीं जानता "राम के लिए सब कुछ स्थानांतरित करने का प्रयास करें, लेकिन यदि संभव हो तो अनुग्रहपूर्वक असफल रहें"।
जूलियानो

1
मैंने इसे आज़माया है और पाया कि यह बहुत धीरे-धीरे काम करता है। तो यह संभव है कि मुफ्त रैम की निगरानी करें और swapoffयदि स्मृति कम हो जाती है तो मार दें: इस मामले में, स्वैप स्थान कार्यात्मक रहेगा :)
kolypto

2
मुझे यकीन नहीं है कि स्वैपऑफ़ को मारना वास्तव में ऑपरेशन को रोक देगा। निर्भर करता है कि इसे कैसे लागू किया जाता है।
डगलस लीडर

2
ऐसा लगता है कि स्वैपऑफ कमांड कुछ ऐसा करता है जैसे "नई राइट्स को स्वैप करने की अनुमति न दें" जबकि कोई अन्य रनिंग प्रक्रिया (जो स्वैप का उपयोग कर रही है) अभी भी "स्वैप जारी" कर सकती है। ऐसा हो सकता है कि यह इतना धीमा जाता है। ऐसा प्रतीत नहीं होता कि ओओएम के कारण किसी अन्य व्यक्ति ने कहा (मैं उबंटू बायोनिक का उपयोग कर रहा हूं) - संभावना है कि केवल तभी मामला होगा जब "अतिरिक्त (या मौजूदा) प्रक्रियाएं नई मेमोरी का उपयोग करना शुरू कर दें" (यानी वास्तविक ओओएम)। तो सभी में सभी swapoff / swapon एक शानदार समाधान है जो ऐसा लगता है। कोमल / स्थिर। यह मानता है कि आप प्रक्रियाओं का उपयोग करके अधिक मेमोरी शुरू नहीं करते हैं (या चलने वाले लोगों में खपत बढ़ाते हैं)।
Roel Van de Paar

12

आप इसे कुछ संख्या में 0 से 100 के बीच में गूँज सकते हैं /proc/sys/vm/swappiness

इस नियंत्रण का उपयोग यह निर्धारित करने के लिए किया जाता है कि कर्नेल मेमोरी पेजों को कितना आक्रामक करेगा। उच्च मूल्यों से आक्रामकता बढ़ेगी, निचले मूल्यों में स्वैप की मात्रा में कमी होगी । 0 का मान कर्नेल को निर्देश देता है कि वह तब तक स्वैप न करें जब तक कि किसी क्षेत्र में उच्च पानी के निशान से मुक्त और फ़ाइल-समर्थित पृष्ठों की मात्रा कम न हो।

डिफ़ॉल्ट मान 60 है।


13
सीधे उपयोग / खरीद / sys न करें, sysctlइसके बजाय कमांड का उपयोग करें । इस मामले में, यह है sysctl vm.swappiness=x
पीटर

7
मुझे नहीं लगता कि शून्य का एक भीपन उन पृष्ठों का कारण बनेगा जो पहले से ही मुख्य मेमोरी में स्पष्ट रूप से लाए जाने के लिए स्वैप किए गए हैं?
डगलस लीडर

1
@ डगलस सही है। vm.swappiness मुख्य रूप से इस निर्णय को नियंत्रित करेगी कि क्या मेमोरी को डिमांड किए जाने पर कैश और बफ़र्स की मात्रा को स्वैप या कम करना है।
जूलियानो

@ जूलियानो, क्यों / proc / sys का उपयोग नहीं किया जाना चाहिए?
जेम्स

@James क्योंकि / proc / sys कर्नेल कॉन्फ़िगरेशन को बदलने और क्वेरी करने के लिए उपयोग किया जाने वाला निम्न स्तर का इंटरफ़ेस है (यह "कार्यान्वयन विवरण" है)। लिनक्स sysctlउपयोगकर्ता इंटरैक्शन के लिए उच्च-स्तरीय कमांड प्रदान करता है । अंतिम परिणाम समान है, लेकिन आमतौर पर उपयोगकर्ता को सीधे बातचीत करने के लिए उच्च-स्तरीय इंटरफेस पसंद किए जाते हैं। केवल कुंजी (उच्च स्तर) को चालू करने के बजाय इग्निशन तारों (निचले स्तर) को शॉर्ट-सर्किट करके इंजन को शुरू करना जैसे किंडा।
जूलियानो

5

लिनक्स स्मृति का प्रबंधन करने के लिए एक अच्छा काम करता है और आपको इसके रास्ते में नहीं खड़ा होना चाहिए। Vm.swappiness सेटिंग (पहले उल्लेखित) अपने तरीके से नहीं मिलती है। आप किसी अन्य तरीके से अजीब मुद्दों का अनुभव करने की संभावना रखते हैं।

आपने क्या लॉन्च किया जो इतनी मेमोरी भूखी थी? क्या इसे ट्यून किया जा सकता है? यदि यह नहीं है कि यह अपनी स्मृति सीमा निर्देशों के अनुसार आप ulimit को भी देख सकते हैं।


मेरे मामले में यह था convert -density 200 file.pdf jpegs/file.jpg। किसी कारण से यह बहुत सारी मेमोरी का उपयोग करता है, लेकिन आप सही हैं: इसे ट्यून किया जा सकता है। वैसे भी, स्थिति किसी भी आवेदन के साथ संभव है :)
kolypto

1
मैं इस जवाब से सहमत हूं - आपको मशीन पर सामान्य संचालन छोड़ना चाहिए जो वास्तव में जरूरी है।
डगलस लीडर

convert-limitइसकी मेमोरी बनाम डिस्क उपयोग को नियंत्रित करने के लिए तर्क है, और आपको उन पर पढ़ना चाहिए। सेटिंग -limit memory 512MBया इसी तरह अच्छा होगा। यह स्पष्ट रूप से एक स्पष्ट MAGICK_TEMPORARY_PATH को निर्दिष्ट करने और आपके आदेश के बाद साफ करने के लिए अच्छा होगा।
slacy

3

यदि आपके पास आपके सभी अनुप्रयोगों के लिए मेमोरी उपलब्ध है, तो स्वैच्छिकता को 0 पर सेट करना ठीक है, इसलिए चीजें स्वैप नहीं होंगी। उदाहरण के लिए, qemu-kvm वीएमएम को स्वैप करने के लिए एक बड़ा लक्ष्य है, क्योंकि यह ज्यादातर समय बेकार दिखाई देता है। मैंने देखा है 80% तक की मेमोरी एक qemu-kvm मेमोरी को स्वैप करने के लिए लिखी जाती है। क्यूमू-केवीएम में चलने वाले वीएम लगभग गैर-जिम्मेदार हो जाएंगे क्योंकि वे स्वैप से बाहर चल रहे हैं (हालांकि मेहमान को पता नहीं है कि यह हो रहा है)। अतिथि VM सोचता है कि यह सबसे उत्कृष्ट प्रदर्शन कर रहा है, भले ही सच में यह बहुत घसीट रहा हो। जब मैं वीएम का गुच्छा "उठता हूं" और चीजें करना शुरू करता हूं, तो यह 30 से अधिक तक लोड औसत को बढ़ा सकता है, यहां तक ​​कि एंटरप्राइज ग्रेड हार्डवेयर पर पर्याप्त तेज मेमोरी और डिस्क के साथ। मुझे लगता है कि यह आउट-ऑफ-द-बॉक्स qemu-kvm डिज़ाइन में विफल है।

आशा है कि यह किसी की मदद करता है।


मुझे डर है कि यह बहुत सटीक नहीं है।
मार्क.2377

2

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


9
कुछ मामले हैं जहां मैं वही करना चाहता हूं जो ओपी चाहता है। अगर मैं गलती से एक प्रक्रिया को दंगा चलाने देता हूं और मेरी सभी रैम + स्वैप को ले लेता हूं, तो मैं हर बार 15 सेकंड तक इंतजार कर सकता हूं क्योंकि मैं स्वैप से बाहर आने के लिए मेमोरी स्विच करता हूं या बस इसे मजबूर करता हूं और सब कुछ हमेशा की तरह तेज चलता है।
एलेक्स

1

यदि आप उस सिस्टम को रिबूट करने में सक्षम हैं जो इसे करना चाहिए (और किसी अन्य समाधान को आज़माने की तुलना में बहुत कम समय लग सकता है)।


1

इस प्रश्न से मेरे कुछ उत्तर को कॉपी करने के लिए

ताकि आपको पता चल जाए कि स्वैग ट्यून कैसे काम करता है। यह वीएम सबसिस्टम को यह बताने के लिए काम करता है कि स्वैप करने के लिए पृष्ठों की तलाश तब की जाए जब मेमोरी का% प्रोसेस करने के लिए मैप किया गया है + टेबल स्वैप मूल्य> 100 है। इसलिए 60 की सेटिंग से सिस्टम पेज टेबल से बासी पेजों को पेजिंग करना शुरू कर देगा। जब यह आपके सिस्टम की मेमोरी का 40% से अधिक उपयोग कर रहा है। यदि आप अपने कार्यक्रमों को कैश की कीमत पर अधिक मेमोरी का उपयोग करने की अनुमति देना चाहते हैं, तो आप स्वेच्छा मूल्य को कम करना चाहते हैं।


मुझे नहीं लगता कि प्रोग्राम मेमोरी बनाम कैश यहां मुद्दा है - मुझे लगता है कि यह एप्लिकेशन मेमोरी बनाम अप्रयुक्त मेमोरी है। और मुझे नहीं लगता कि स्वपनदोष का असर पड़ेगा।
डगलस लीडर

0

क्या प्रक्रिया अभी भी चल रही है? एक टर्मिनल खोलें और देखें कि क्या आप लॉन्च की गई प्रक्रिया को देख सकते हैं। (ps aux | grep processname इसे थोड़ा आसान बना सकता है) यदि वे अभी भी चल रहे हैं तो उन्हें मारने के लिए किल -9 PID का उपयोग करें। आप जो मारते हैं, उससे सावधान रहें। यदि आप नहीं जानते कि प्रक्रिया क्या है, तो इसे मारें नहीं! इसके अलावा, फ्री-एम के आउटपुट को पोस्ट करें ताकि हम देख सकें कि क्या आप वास्तव में अभी भी बहुत स्वैप का उपयोग कर रहे हैं।

यदि चीजें अभी भी धीमी गति से चल रही हैं, तो आपके पास अभी भी जो कुछ भी है उसे आप अभी भी चला रहे हैं। जब तक आप वास्तव में आप क्या कर रहे हैं या आप किनारे पर रहना पसंद करते हैं, तब तक मैं कभी भी स्वैप को बंद नहीं करूंगा। =)


0

मेरा मानना ​​है कि लिनक्स को डिस्क से मेमोरी तक डेटा को मजबूर करने का कोई अच्छा तरीका नहीं है। जब स्वेपऑफ़ / स्वेपन एक काम करने वाला उपाय है, लेकिन यह गंदा है और आसानी से आपके सिस्टम को अस्थिर कर सकता है। उन मामलों के लिए जब आपके पास मुफ्त मेमोरी की तुलना में स्वैप में अधिक डेटा है, तो किसी भी कुशल नीति की कल्पना करना कठिन होगा जो लिनक्स यह तय करने के लिए काम कर सकता है कि डेटा के कौन से टुकड़े स्मृति में चले जाते हैं और कौन से टुकड़े डिस्क पर रहते हैं।

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


-2

बफ़र्स कैश को खाली करना

यदि आप कभी भी उन्हें खाली करना चाहते हैं तो आप इस श्रृंखला का उपयोग कर सकते हैं।

$ free && sync && echo 3 > /proc/sys/vm/drop_caches && free

             total       used       free     shared    buffers     cached
Mem:       1018916     980832      38084          0      46924     355764
-/+ buffers/cache:     578144     440772
Swap:      2064376        128    2064248
             total       used       free     shared    buffers     cached
Mem:       1018916     685008     333908          0        224     108252
-/+ buffers/cache:     576532     442384
Swap:      2064376        128    2064248

आप ऊपर दिए गए आदेश में संख्यात्मक तर्क को बदलकर कैश्ड आइटम के विभिन्न पहलुओं को छोड़ने के लिए लिनक्स कर्नेल को संकेत कर सकते हैं।

नोट: अनावश्यक चीजों की स्मृति को साफ करें (कर्नेल 2.6.16 या नया)। हमेशा उपयोगी चीजों को डिस्क से बाहर फ्लश करने के लिए सबसे पहले सिंक चलाना सुनिश्चित करें !!!

  • पेजकेश को मुक्त करने के लिए:

    $ echo 1 > /proc/sys/vm/drop_caches
    
  • डेन्चर और इनोड्स को मुक्त करने के लिए:

    $ echo 2 > /proc/sys/vm/drop_caches
    
  • पेजचेस, डेंट्री और इनोड्स को मुक्त करने के लिए:

    $ echo 3 > /proc/sys/vm/drop_caches
    

उपरोक्त को मूल के रूप में चलाया जाता है। यदि आप उन्हें sudo का उपयोग करने की कोशिश कर रहे हैं तो आपको सिंटैक्स को कुछ इस तरह से बदलना होगा:

$ sudo sh -c 'echo 1 >/proc/sys/vm/drop_caches'
$ sudo sh -c 'echo 2 >/proc/sys/vm/drop_caches'
$ sudo sh -c 'echo 3 >/proc/sys/vm/drop_caches'
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.