यदि मेरे पास पर्याप्त मात्रा में रैम है तो क्या मुझे स्वैप स्पेस की आवश्यकता है?


91

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

यह तब बहुत अच्छा होता है जब आप कम मात्रा में RAM वाली मशीन पर होते हैं और यदि आप बाहर भागते हैं तो समस्याओं में नहीं पड़ना चाहते। हालाँकि, यदि आपके सिस्टम में 16 GB या 32 GB RAM है, और मान लें कि आप StackExchange के लिए MySQL डेटाबेस नहीं चला रहे हैं या लिनक्स में 1080p फुल लेंथ मूवी एडिट कर रहे हैं, तो क्या एक स्वैप पार्टीशन का उपयोग किया जाना चाहिए?


16
@mikeserv तुम्हें पता है, मैं उन दो पत्रों को केवल हास्य प्रभाव के लिए एक उत्तर के रूप में स्वीकार करना पसंद करूंगा।
IQAndreas

3
@ जानिस - इसमें बहुत खर्च होता है। और आप आसानी से 1 जीबी मशीन पर स्वैप के बिना भी कर सकते थे यदि आप ध्वनि मेमोरी प्रबंधन लागू करते थे। स्वैप की लागत प्रदर्शन है - जब आपके पास यह कर्नेल अनिवार्य रूप से इसका उपयोग करेगा। इसलिए 1TB पर या जो भी आकार डिस्क को स्वैप पार्टीशन बनाते हैं, उन्हें कर्नेल को डिस्क पर मेमोरी पेज लगाने के बजाय, उन्हें रैम में रखने या उन्हें पूरी तरह से छोड़ने का निमंत्रण है। 16 जीबी के साथ एक विशिष्ट उपयोगकर्ता कभी भी यह सब उपयोग नहीं करेगा - मुझे 3 दिनों के समय के बाद 24 जीबी रैम डब्ल्यू / 2 जीबी का उपयोग किया गया है और 10 जीबी कैश किया गया है (क्योंकि मैं एक धार को dl'd /tmp)
मिकसेर

5
@ माइकर्स, आप गलत हैं मुझे डर है; मैंने लगातार प्रदर्शित डिस्क मेट्रिक्स का अवलोकन किया है। जब तक मुफ्त मेमोरी है तब तक स्वैप का उपयोग नहीं किया गया है, केवल जब मेमोरी भर गई थी तब स्वैपिंग शुरू हुई थी। मुझे लगता है कि यह इस बात पर निर्भर करता है कि आप अपने कंप्यूटर का उपयोग कैसे करते हैं; एक डेस्कटॉप सिस्टम जो हर शाम बंद होता है, शायद ही कभी स्मृति समस्याओं का सामना करता है, मेरे सिस्टम में महीनों के उतार-चढ़ाव थे। हां, स्वैप में प्रदर्शन की लागत है, लेकिन अगर कोई रैम स्थान नहीं बचा है तो आपका सिस्टम काम करना जारी रख सकता है। आपके पास क्या विकल्प है? शायद आप स्मृति प्रबंधन तर्क पर विस्तार से बता सकते हैं। मैं अपने लिनक्स सिस्टम का उपयोग प्री-कॉन्फिगर्ड के रूप में करता हूं।
Janis

40
@mikeserv आपने 15 वर्णों से कम की टिप्पणी कैसे पोस्ट की?
इम्बिसिस

11
@immibis 12 देखते हैं शून्य चौड़ाई रिक्त स्थान वहाँ में
डेव

जवाबों:


98

हाँ।

आपको निश्चित रूप से हमेशा स्वैप सक्षम होना चाहिए, सिवाय इसके कि कोई बहुत सम्मोहक, निषिद्ध कारण है (जैसे, कोई डिस्क नहीं है, या केवल नेटवर्क डिस्क मौजूद है)। क्या आपको अक्सर अनुशंसित हास्यास्पद आकार (जैसे, दो बार रैम की मात्रा) के आदेश पर एक स्वैप होना चाहिए? खैर, नहीं

इसका कारण यह है कि स्वैप केवल तब उपयोगी नहीं होता है जब आपके अनुप्रयोग भौतिक रैम की तुलना में अधिक मेमोरी का उपभोग करते हैं (वास्तव में, उस स्थिति में, स्वैप बिल्कुल भी उपयोगी नहीं है क्योंकि यह प्रदर्शन को गंभीर रूप से प्रभावित करता है)। आजकल स्वैप के लिए मुख्य प्रोत्साहन जादुई रूप से 16GiB RAM को 32 GiB में बदलना नहीं है, बल्कि स्थापित, उपलब्ध RAM का अधिक कुशल उपयोग करना है।

आधुनिक कंप्यूटर पर, RAM अप्रयुक्त नहीं होती है। अप्रयुक्त रैम एक ऐसी चीज है जिसे आप खरीद सकते हैं और इसके बदले पैसे नहीं बचा सकते हैं। इसलिए, आप जो कुछ भी लोड करते हैं या कुछ भी करते हैं, अन्यथा मेमोरी-मैप्ड, कुछ भी जो संभवतः किसी भी समय के बाद किसी भी द्वारा पुन: उपयोग किया जा सकता है (सुरक्षा बाधाओं द्वारा सीमित) को कैश किया जा रहा है। मशीन के बूट होने के तुरंत बाद, सभी भौतिक रैम का उपयोग किसी चीज़ के लिए किया जाएगा ।

जब भी आप ऑपरेटिंग सिस्टम से नया मेमोरी पेज मांगते हैं, तो मेमोरी मैनेजर को एक शिक्षित निर्णय लेना पड़ता है:

  1. बफर कैश से एक पृष्ठ शुद्ध करें
  2. मैपिंग से एक पृष्ठ शुद्ध करें (अधिकांश प्रणालियों पर प्रभावी रूप से # 1 के रूप में ही)
  3. ऐसे पृष्ठ को स्थानांतरित करें जो लंबे समय तक एक्सेस नहीं किया गया है - अधिमानतः कभी नहीं - स्वैप करने के लिए (यह वास्तव में लगातार भी हो सकता है, जरूरी नहीं कि बहुत अंतिम क्षण में)
  4. अपनी प्रक्रिया को मारें, या एक यादृच्छिक प्रक्रिया को मारें (OOM)
  5. कर्नेल पैनिक

विकल्प # 4 और # 5 बहुत अवांछनीय हैं और केवल तभी होगा जब ऑपरेटिंग सिस्टम के पास कोई अन्य विकल्प न हो। विकल्प # 1 और # 2 का मतलब है कि आप कुछ ऐसा फेंक देते हैं, जिसकी आपको संभवतः जल्द ही फिर से आवश्यकता होगी। यह प्रदर्शन पर नकारात्मक प्रभाव डालता है।

विकल्प # 3 का अर्थ है कि आप कुछ ऐसा स्थानांतरित करते हैं जो आपको (शायद) धीमी गति से भंडारण पर जल्द ही किसी भी समय की आवश्यकता नहीं है। यह ठीक है क्योंकि अब आपको जिस चीज़ की ज़रूरत है वह तेज़ रैम का उपयोग कर सकता है।

विकल्प # 3 को हटाकर, आपने ऑपरेटिंग सिस्टम को # 1 या # 2 करने के लिए प्रभावी रूप से सीमित कर दिया है। डिस्क से किसी पृष्ठ को पुनः लोड करना, इसे स्वैप से पुनः लोड करने के समान है, केवल स्वैप से पुनः लोड करने के अलावा आमतौर पर कम संभावना है (उचित पेजिंग निर्णय लेने के कारण)।

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

[संपादित करें]

mmap मैनपेज के सावधान पाठक , विशेष रूप से इसका वर्णन MAP_NORESERVE, एक और अच्छा कारण बताएंगे कि "पर्याप्त" भौतिक स्मृति के साथ एक सिस्टम पर भी स्वैप की आवश्यकता क्यों है:

"जब स्वैप स्थान आरक्षित नहीं है तो किसी को कोई शारीरिक मेमोरी उपलब्ध नहीं होने पर SIGSEGV मिल सकता है।"

- एक पल रुकिए, इसका क्या मतलब है?

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

अब अगर अदला-बदली न हो तो क्या होगा? इसका मतलब है कि कोई स्वैप आरक्षित नहीं किया जा सकता है (डुह!), और इसका मतलब है कि जैसे ही कोई खाली भौतिक पृष्ठ नहीं बचे हैं, और आप एक पृष्ठ पर लिख रहे हैं, आपको अपनी प्रक्रिया के रूप में सुखद आश्चर्य प्राप्त हो रहा है एक विभाजन दोष, और शायद मारा जा रहा है।

[/ संपादित करें]

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

कोई एकल "सही" स्वैप आकार नहीं है (उपयोगकर्ता और राय के रूप में कई "सही" आकार हैं)। मैं आमतौर पर RAM आकार की परवाह किए बिना एक निश्चित 512MiB असाइन करता हूं, जो मेरे लिए बहुत अच्छा काम करता है। इसके पीछे तर्क यह है कि 512MiB एक ऐसी चीज है जिसे आप हमेशा छोटी डिस्क पर भी खर्च कर सकते हैं। दूसरी ओर, कई गीगाबाइट स्वैप को जोड़ना बेहतर नहीं है। आप उनका उपयोग नहीं करने जा रहे हैं, सिवाय इसके कि कुछ गंभीर रूप से गलत हो रहा है।

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

एक बार जब आपका कंप्यूटर पृष्ठों के लायक गीगाबाइट में और बाहर स्वैप करना शुरू कर देता है, तो सब कुछ क्रॉल में चला जाता है। इसलिए, ज्यादातर लोगों के लिए (मेरे सहित) यह एक विकल्प नहीं है, और इतना स्वैप होने का कोई मतलब नहीं है।


7
पूरी तरह से असत्य: यह कर्नेल के लिए डिस्क का उपयोग न करने का एक फायदा हो सकता है, खासकर यदि आपने अपने चश्मे से OOM को कॉन्फ़िगर किया है। यदि OOM किलर आपके क्लीनअप को संभालने के लिए कॉन्फ़िगर किया गया है, तो डिस्क स्थान को बर्बाद करने और अपनी मशीन को धीमा करने के बजाय ऐसा करना लाभप्रद है।
मिकसेर

22
8 जीबी रैम और 8 जीबी स्वैप और 16 जीबी रैम और कोई स्वैप नहीं होने में क्या अंतर है? यदि आपका कंप्यूटर यह निर्णय लेता है कि उसे 16.001 GB मेमोरी की आवश्यकता है, तो क्या यह सामानों को शुद्ध करना / मारना शुरू नहीं करेगा (लेकिन ऐसा होने से पहले ही प्रदर्शन खराब हो जाएगा)?
निक टी

5
@ निकट: स्वैप अधिक रैम के लिए नहीं है क्योंकि लाल झंडा है कि कुछ जल्द ही मार दिया जाएगा। मुझे मारने से पहले एक लाल झंडा होना पसंद है, मेरी आँखों के सामने एक प्रक्रिया "बेतरतीब ढंग से" गायब होने के बजाय।
मिंग डक

10
-1 इस जवाब का कोई मतलब नहीं है। क्यों बिल्ली में धीमी मेमोरी होगी (स्वैप) तेज मेमोरी (RAM) की समान मात्रा से बेहतर प्रदर्शन होता है ?? कुछ बिंदु पर आपको स्वीकार करना होगा कि पर्याप्त RAM का मतलब है कि कोई स्वैप आवश्यक नहीं है ..
मेहरदाद

14
@ मेहरदाद: यह निश्चित रूप से समझ में आता है। धीमी मेमोरी (स्वैप) प्रदर्शन में सुधार करती है क्योंकि "धीमी" उन चीजों के लिए कोई मायने नहीं रखती है जिन्हें आप शायद ही कभी एक्सेस करते हैं या कभी नहीं करते हैं। स्वैप प्रभावी रूप से मेमोरी की मात्रा को बढ़ाता है जो "ठंडा" डेटा बाहर ले जाकर "हॉट" डेटा के लिए उपलब्ध है। डेमन जो केवल कर्नेल मॉड्यूल द्वारा आवंटित प्रति घंटे या मेमोरी में एक बार कुछ निष्पादित करते हैं जो डिफ़ॉल्ट रूप से लोड होते हैं लेकिन कभी भी इसका उपयोग नहीं किया जाता है। आप उन स्वैप कर सकते हैं , या आप इसके बजाय कैश से पृष्ठों को छोड़ सकते हैं। इनमे से कौन बेहतर है?
डेमन

50

मैं उन कुछ रायों से असहमत होने जा रहा हूं जो मुझे यहां बताई गई हैं। मैं अभी भी विशेष रूप से एक उत्पादन वातावरण में एक स्वैप विभाजन बना रहा हूँ। मैं इसे अपने घरेलू मशीनों और वीएम के लिए भी करता हूं।

इन दिनों मैं उन्हें 1-1.5 गुना मेमोरी के आसपास भेज रहा हूं। 2 बार स्मृति अंगूठे का नियम हुआ करती थी। स्वैप डिस्क "सस्ता" है, जिसमें इसे बैकअप या संरक्षित करने की आवश्यकता नहीं है।

क्या आपको मेमोरी पर कम चलना चाहिए, फिर आपकी स्वैप स्पेस आपको समस्या को दूर करने के लिए थोड़ा समय और तकिया देती है।

एहसास है कि स्वैप स्पेस में / tmp जैसी चीजें निवास कर सकती हैं।

स्वैप क्षेत्र एक आंशिक कर्नेल डंप पकड़ सकता है ताकि इसे अगले रिबूट पर बहाल किया जा सके। यह कुछ भविष्य डिबगिंग आपातकाल के लिए अच्छा हो सकता है जिसे आपको करने के लिए कहा जाता है।


16
+1। स्वैप होने का मतलब है, कम मेमोरी और हार्ड क्रैश के तहत चोटिल प्रदर्शन के बीच का अंतर।
डेविड मै

6
@mikeserv कोई फर्क नहीं पड़ता कि आप इसे कैसे कॉन्फ़िगर करते हैं, यदि आपका प्रोग्राम उपलब्ध होने की तुलना में अधिक मेमोरी आवंटित करने का प्रयास करता है, तो कुछ दुर्घटनाग्रस्त होने वाला है, या ओएस उन्हें मारना शुरू कर देगा।
डेविड एमएच

6
@Davidmh: उस कारण से आपकी स्वैप फ़ाइल असीम रूप से बड़ी होनी चाहिए, अन्यथा आपके प्रोग्राम तब भी क्रैश होंगे जब वे स्वैप फ़ाइल को समाप्त करते हैं।
मेहरदाद

6
@ मेहरदाद लेकिन यह भी अधिक महंगा है। यह देखते हुए कि आपके पास X GB RAM है, क्योंकि जितना आप खर्च कर सकते हैं, यह Y के कुछ उचित मानों के लिए, X GB RAM और Y स्वैप की तुलना में कड़ाई से बदतर है (जो आपके उपयोग और आकार पर निर्भर करेगा। आपका HD)।
डेविड मै

9
"आपकी स्वैप स्पेस आपको समस्या को दूर करने के लिए थोड़ा समय और कुशन देती है" - इसका मतलब यह भी है कि मुझे एक अनुत्तरदायी मशीन के सामने ज्यादा समय तक बैठना होगा जब तक कि कोई मेमोरी लीक "खुद" नहीं हो जाती।
राफेल

23

शायद:

मैंने इस विषय पर बहुत विचार किया है और मैंने जितना देखा है उससे अधिक बार तर्क के दोनों पक्षों पर विचार करते हुए देखा। मेरा दृष्टिकोण यह पता लगाने का एक तरीका विकसित करना था।

एक सक्रिय स्वैप विभाजन से शुरू करें जो आपको लगता है कि एक पर्याप्त आकार है।

फिर, एक कार्यक्षेत्र में एक टर्मिनल खोलें और कमांड जारी करें free -hs 1जो हर सेकंड में एक बार उपयोग की रिपोर्ट करेगा।

वैकल्पिक रूप से अन्य कार्यस्थानों पर स्विच करें।

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

जब आपको लगता है कि आपके पास एक उच्च भार के तहत सिस्टम है (या आपके कभी भी उच्च होने की संभावना है और तब कुछ) टर्मिनल को देखें और परिणामों की जांच करें। या >output.txtकमांड में जोड़कर फ़ाइल में बेहतर अभी तक पुनर्निर्देशित आउटपुट ताकि आप पूर्ण रन की जांच कर सकें। यदि आपका स्वैप उपयोग कभी भी मेम से अधिक नहीं होता है तो आपको स्वैप की आवश्यकता नहीं है। अगर ऐसा होता है, तो आप करते हैं। free.png

मुझे स्वैप की जरूरत नहीं है। शायद आप करें। पता क्यों नहीं चला?

जहां तक ​​आकार बदलने की बात है, अंगूठे के नियम आमतौर पर ओवर-रेटेड होते हैं क्योंकि यह उपयोग आधारित प्रश्न है।


2
तो, क्या आप कह रहे हैं कि स्वैप का उपयोग केवल तभी किया जाता है जब आपके सिस्टम को इसकी आवश्यकता होती है? किस मामले में, क्या कभी स्वैप सक्षम होने में कोई जुर्माना है - बस मामले में? अन्य टिप्पणियों से लगता है कि यहां तक ​​कि स्वैप की उपस्थिति प्रदर्शन के लिए हानिकारक हो सकती है?
MrWhite

3
@ w3d नहीं, मैं ऐसा नहीं कह रहा हूं। जैसा कि आप ऊपर दिए गए मेरे आउटपुट से देख सकते हैं, यदि आवश्यक न हो तो भी स्वैप का उपयोग किया जाता है। इसे स्वैपीनेस कारक के साथ कुछ हद तक समायोजित किया जा सकता है। मैं स्वैप या नहीं होने की आवश्यकता के बारे में बात कर रहा हूँ।
एल्डर गीक

आप किसी भी समय swapखत्म freeहो जाता है ऊपर स्वैप वृद्धि के लिए यह स्क्रिप्ट कर सकते हैं ?
JFA

@ जेएफए मैंने ऐसा नहीं किया है। व्यक्तिगत रूप से मुझे इस उद्देश्य के लिए स्वैप स्थान की अनिश्चित राशि को जमा करने की अवधारणा के साथ कठिनाई है। सैद्धांतिक रूप से सभी चीजें संभव हैं। यह कार्यान्वयन चरण है जो दिलचस्प हो जाता है।
एल्डर गीक

17

नोट: यह मेरे लिए एक विशिष्ट, असामान्य स्थिति में हुआ। यदि आप किसी समस्या का निवारण कर रहे हैं, तो यह उपयोगी हो सकता है। मेरा मतलब यह नहीं है कि सभी मशीनों को स्वैप होना चाहिए।

शायद!

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

इन उपकरणों में से अधिकांश ने ठीक काम किया, लेकिन विशेष रूप से व्यस्त बॉक्स पर, मैं एक समस्या में भाग गया:

स्मृति प्रकाशन

स्वैप स्पेस के बिना, मेमोरी धीरे-धीरे अधिक खंडित हो गई, विशेष रूप से लंबी चलने वाली प्रक्रियाओं के साथ (भले ही मेरे पास बहुत सारी मुफ्त मेमोरी थी, यह बहुत छोटे बिट्स में था)। मैंने कुछ स्वैप स्पेस डाला, और लिनक्स को कहा कि जब तक इसका इस्तेमाल नहीं करना है; इससे समस्या पूरी तरह हल हो गई।

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

बाहर की जाँच करें / खरीद / दोस्त - मेरा अब इस तरह दिखता है:

Node 0, zone      DMA      9      5      3      4      2      3      2      2      3      3      1 
Node 0, zone    DMA32  33901   1149      0      0      0      0      0      0      0      0      1 
Node 0, zone   Normal   2414   1632    259     22      3      0      2      0      1      1      0 

संख्या विभिन्न आकारों के ब्लॉक का प्रतिनिधित्व करती है; प्रत्येक आकार अगले ब्लॉक का आधा आकार है, बाईं ओर 4mb ब्लॉक से, दाईं ओर 4kb (यानी, 4mb, 2mb, 1mb, और आगे)। एक नई बूट की गई मशीन में बाईं ओर सभी ब्लॉक होने चाहिए, बहुत कम दाईं ओर (= खंडित नहीं)। यह भी याद रखें कि मेमोरी की समान मात्रा (उदाहरण के लिए 4mb) को कॉलम में अलग-अलग संख्याओं के रूप में दर्शाया जाएगा - बाएं-सबसे कॉलम में 1 ब्लॉक, दाएं-सबसे कॉलम पर 1024।

मेमोरी को पूल से आवंटित किया जाता है जो यथासंभव सही है; उदाहरण के लिए यदि आपका प्रोग्राम 12kb मेमोरी (एक बार में) चाहता है, तो यह 16kb कॉलम से ले जाएगा; शेष 4kb कॉलम में दिखाई देगा। यदि 16kb ब्लॉक नहीं हैं, तो यह 32kb ब्लॉक से लेगा, जिसके परिणामस्वरूप 16kb और 4kb शेष रहेंगे, और आगे भी।

यदि कोई मेमोरी ब्लॉक बहुत बड़ा नहीं है, और आप स्वैप स्पेस हैं, तो उदाहरण के लिए, यदि आप 16kb मेमोरी चाहते हैं, तो यह 16kb का सबसे कम इस्तेमाल किया ब्लॉक मिलेगा (जिसमें हो सकता है, जैसे 4kb का इस्तेमाल किया ब्लॉक, 4kb उपलब्ध ब्लॉक, और 2 अधिक उपयोग किए गए 4kb ब्लॉक), केवल स्वैप करने के लिए USED भागों को स्थानांतरित करें, और नए एप्लिकेशन को मुक्त मेमोरी आवंटित करें।

दुर्घटनाग्रस्त होने वाले बॉक्स में, मेरे पास 4kb और 8kb ब्लॉक के सैकड़ों हजारों थे, और बहुत कुछ नहीं।

AS FAR AS I CAN TELL (दुर्घटनाग्रस्त मशीनों द्वारा जाना!) कर्नेल स्मृति से स्वैप की ओर जाएगा, और मेमोरी से स्वैप करने के लिए, लेकिन मेमोरी से मेमोरी में कभी नहीं जाएगा।


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

2
यही कारण है कि मैंने कभी भी एक स्वैप विभाजन का उपयोग करने के पक्ष में पढ़ा है। मैंने एक त्वरित खोज की कोशिश की और इसके बारे में कोई संदर्भ नहीं पाया, मुझे आश्चर्य है कि इस सुविधा को अधिक बार प्रलेखित क्यों नहीं किया गया है।
마 एसई

1
(नॉन-ट्रांसपेरेंट) विशालपद आपके ऐप द्वारा उपयोग करने योग्य नहीं हो सकते हैं। आमतौर पर जिन ऐप्स को मेमोरी की आवश्यकता होती है, वे उनका उपयोग कर सकते हैं; जैसे, डेटाबेस सर्वर, जावा jvm। उन्हें स्पष्ट रूप से सक्षम होना चाहिए, और वे एक अलग मेमोरी पूल बन जाते हैं जिसका उपयोग अन्य उद्देश्यों के लिए नहीं किया जा सकता है। आपकी परिस्थितियों के आधार पर यह अच्छा हो सकता है या बुरा हो सकता है। साथ ही, ट्रांसपेरेंट विशालपदों के बारे में जानें। इन चीजों को इधर-उधर ले जाने का प्रयास करें ताकि आप अपने एप्लिकेशन (भले ही उनके प्रदर्शन सुधार के लिए) का उपयोग नहीं कर रहे हैं। यदि स्मृति खंडित है तो चीजें दक्षिण में जा सकती हैं क्योंकि विशाल पृष्ठ स्वीपर के पास अधिक है।
दान प्रिट्स

1
मुझे आपके फ्लैश उपकरण के साथ आपके अनुभव पर संदेह नहीं है, मुझे यकीन नहीं है कि आपके द्वारा प्रस्तुत एकल उपयोग का मामला संभवतः स्वैप की आवश्यकता के बराबर है और मैं इस बात पर अडिग हूं कि स्मृति विखंडन स्वैप से संबंधित है या नहीं। यह एक दिलचस्प सवाल उठाता है जिसे आसानी से परीक्षण किया जा सकता है और साबित या अस्वीकृत किया जा सकता है।
एल्डर गीक

1
अनुवर्ती प्रश्न । "स्मृति विखंडन" से आपका क्या अभिप्राय है? MMU परवाह नहीं करता है कि कुछ वर्चुअल एड्रेस स्पेस में लगातार पृष्ठों के लिए उपयोग किए जाने वाले भौतिक पृष्ठ लगातार हैं या नहीं। भौतिक पृष्ठ खंडित हैं, लेकिन इससे कोई फर्क नहीं पड़ता है (जब तक हम एक एकल-क्लस्टर भौतिक मशीन पर साधारण अनुप्रयोग मेमोरी की बात कर रहे हैं और उदाहरण के लिए एक परिधीय या हाइपरवाइजर द्वारा उपयोग किए जाने वाले मेमोरी पेज नहीं हैं)। जब कोई प्रोग्राम 16kB के लिए पूछता है, तो उसे चार पृष्ठ मिलते हैं, जो भौतिक स्मृति में एक साथ कहीं भी हो सकता है या नहीं भी हो सकता है।
गाइल्स

15

जब आप बाहर निकलते हैं तो स्वैप विभाजन का महत्वपूर्ण मान होता है, बस कुछ अतिरिक्त रैम के रूप में कार्य करना।

एक के लिए, लिनक्स फाइलों और आईओ ऑपरेशंस को कैश करने के लिए जितना संभव हो उतना मेमोरी का उपयोग करता है, अगर आपके पास कुछ स्वैप है तो आप पा सकते हैं कि अधिक मेमोरी आईओ को कैशिंग करने और इसे तेजी से बनाने (डिस्क एक्सेस को कम करके और एसएसडी पर पहनने को कम करके) का विरोध करती है। डेटा रखने के लिए जिसे कुछ कार्यक्रम आवंटित किया गया है, लेकिन केवल हर 12 घंटे में एक बार उपयोग कर रहा है जो कुछ डेमों के लिए हो सकता है।

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

ये कारक मुझे व्यक्तिगत रूप से विश्वास दिलाते हैं कि लगभग हर सामान्य सिस्टम पर कुछ स्वैप होना बेहतर है, लेकिन बड़े आकार के लिए मैं राम * 2 नियम को अनदेखा करता हूं और बस 4-8GB पर मेरी स्वैप कैप करता हूं (डिस्क के आकार के आधार पर) )।


9
यहां तक ​​कि 4GB एक डेस्कटॉप के लिए बहुत बड़ा है। मुझे लगता है कि OOM किलर को सक्रिय करने से पहले, अगर कुछ गलत हो जाता है, तो उसे भरने के लिए इंतजार करना होगा। (अगर मैं कभी ऐसे मामले में भाग गया, जहाँ मुझे अधिक आवश्यकता थी, तो मैं dd और mkswap कर सकता हूँ स्वैप करने से पहले FILE जो कुछ भी बहुत बड़ी नौकरी की आवश्यकता थी, उसकी मशीन की तुलना में अधिक वर्चुअल मेमोरी में RAM थी। अर्थात, यदि मेरे वेब ब्राउज़र से बाहर निकलना पर्याप्त नहीं था। ...)
पीटर कॉर्डेस

@PeterCordes जो संभवतः इस बात पर निर्भर करता है कि आप किस तरह के कार्य कर रहे हैं, मैं पूरी तरह से समझता हूं। व्यक्तिगत रूप से, मुझे लगता है कि मुझे स्वैप के उच्च स्तरों से लाभ होता है क्योंकि मैं अक्सर अपनी मशीन का उपयोग करते समय पृष्ठभूमि में कम प्राथमिकता पर लंबे संकलन करता हूं, ये तब बाहर निकल जाते हैं जब स्मृति अन्यथा तंग होती है (आमतौर पर जब मशीन किसी भी संकलन को करने में बहुत व्यस्त होती है। वैसे भी)। फिर भी, मैं मानता हूं कि यह एक बहुत ही व्यक्तिगत कार्य भार आधारित चीज है, किसी को भी निर्णय लेने से पहले हमेशा अपने स्वयं के उपयोग के बारे में सोचना चाहिए।
वैलिटी

1
मजेदार कहानी: आज ही के दिन, 4GB RAM, 0.5G स्वैप (SSD) के साथ मेरे लैपटॉप पर, फ़ायरफ़ॉक्स ने OOM किलर (जो फ़ायरफ़ॉक्स उठाया था) को ट्रिगर किया। मैं ऐसा पहले नहीं हुआ था। (हालांकि मैं अपने लैपटॉप का इस्तेमाल सामान्य से अधिक कर रहा था)। बहुत ज्यादा कुछ और नहीं चल रहा था (सिर्फ गनोम-टर्मिनल एक्सफ़्से में)। इसलिए मुझे लगता है कि मैं इसके साथ ठीक हूं, क्योंकि फ़ायरफ़ॉक्स को इतना रैम बाँधने से बेहतर पता होना चाहिए। मैंने देखा कि किसी ने कुछ समय पहले कहा था कि "वेब ब्राउज़र वर्चुअल मेमोरी सबसिस्टम का तनाव-परीक्षण करने के लिए मौजूद हैं", या ऐसा ही कुछ। फ़ायरफ़ॉक्स टैब्स के लिए मुक्त करने में बहुत बुरा है जो कि दिनों के लिए इस्तेमाल नहीं किया गया है, आदि
पीटर कॉर्डेस

3
एक मामला जहां लिनक्स उपलब्ध स्वैप स्पेस पर विचार करता है, जब एक बड़ी प्रक्रिया एक बच्चे को लॉन्च करने का प्रयास करती है: कांटा () + निष्पादन () सिस्टम कॉल माता-पिता के आवंटन को लगभग दोहराकर शुरू होता है - कर्नेल गारंटी नहीं दे सकता कि नया बच्चा छोटा होगा माता-पिता की तुलना में। स्वैप स्थान का आमतौर पर उपयोग नहीं किया जाता है, लेकिन जब तक यह उपलब्ध नहीं होता है कांटा () विफल हो सकता है। क्लाइंट पर एक विशिष्ट उदाहरण एक ब्राउज़र है जो प्लग-इन या सर्वर पर शुरू होता है जब एक बड़ा एप्लिकेशन कंटेनर एक सहायक प्रोग्राम को आमंत्रित करता है। 1/2 या 1GiB स्वैप की समस्या को हल करने के लिए आमतौर पर पर्याप्त है। Google "java exec मेमोरी को आवंटित नहीं कर सकता है"
James

13

आपके पास अधिकतम आकार से बड़ा स्वैप कभी नहीं होना चाहिए जिसे आप कर्नेल को स्वैप / आउट करने के इंतजार में सहन करने में सक्षम होंगे; अन्यथा, आप बस अपने सिस्टम के लिए एक नई विफलता मोड बना रहे हैं (स्वैपिंग में अपरिवर्तनीय रूप से बंद हो जाते हैं)। ध्यान दें कि, आधुनिक ड्राइव जीबी / सेकंड के आदेश पर स्थानांतरित करने में सक्षम होने के बावजूद, लिनक्स आमतौर पर सैकड़ों kB की लाइनों के साथ दरों पर स्वैप को स्थानांतरित करने में सक्षम है, या सबसे अच्छा कुछ एमबी, प्रति सेकंड। इतना बड़ा स्वैप आपके सिस्टम को मिनटों, घंटों या दिनों के लिए बेकार कर सकता है।

यदि आपके पास पर्याप्त भौतिक स्मृति है जो आप कर रहे हैं, तो स्वैप के लिए आदर्श आकार इसे "जंक डेटा" प्रक्रियाओं की मात्रा के साथ मेल खाना है, लेकिन कभी भी उपयोग नहीं कर रहे हैं। यह शायद कुछ सौ मेगाबाइट की कुछ की सीमा में है। यह रणनीति आपके सभी भौतिक मेमोरी का उपयोग डेटा के लिए स्थायी स्टोर के बजाय उपयोगी जानकारी को कैशिंग के लिए उपयोग करने की अनुमति देती है जो संभवतः फिर से उपयोग नहीं किया जाएगा।

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


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

स्वैप स्पेस के खिलाफ एकमात्र तर्क मुझे यह मिल सकता है: "कुछ प्रोग्राम लीक मेमोरी"। तथा? यदि OOM हत्यारा महत्वपूर्ण चीज को मारता है जिसे आपने नहीं बचाया था, तो आप प्रभावी रूप से अपना काम खो देते हैं। जिसका अर्थ है कि यह तर्क पूरी तरह से अप्रासंगिक हो जाता है, मैं बस अपनी मशीन को बंद करने के लिए मजबूर कर सकता हूं, जबकि सटीक प्राथमिकता वाले कम स्वैप कार्यों के लिए उच्च स्वैप स्थान है जो बहुत अधिक मेमोरी का उपयोग करते हैं और अक्सर बाहर स्वैप किए जाते हैं। यदि आपकी मशीन ऐसी स्थिति में फंस जाती है तो यह आपकी अपनी गलती है। मेरे साथ ऐसा ही हुआ जब मैंने खुद पूरी कामकाजी यादों को भरने के लिए एक कार्यक्रम लिखा।
सहसहाय

11

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


6

इसका कोई सार्वभौमिक और स्पष्ट उत्तर नहीं है क्योंकि यह आपके द्वारा किए जाने वाले कार्य पर निर्भर करता है। यदि आप DB, HTTP, वर्चुअलाइजेशन या कैश सर्वर चलाने वाले हैं, तो आपके पास कभी भी किसी भी प्रकार की स्वैप सक्षम नहीं होनी चाहिए, चाहे आपके पास कितनी भी राशि हो। यदि आपके पास एक डेस्कटॉप या मिश्रित-कार्य होस्ट है और आपके पास 16+ जीबी की फास्ट रैम है - तो यहां एक नज़र डालें: zRam


zRam एक शानदार विकल्प है। मैंने इसे अच्छे प्रभाव के लिए छोटे फ्लैश ड्राइव सिस्टम के साथ संयोजन में उपयोग किया है।
एल्डर गीक

1
@ElderGeek मैंने इसे एक डिस्क रहित वातावरण में भी उपयोग किया है, उदाहरण के लिए नेटवर्क बूट। महान काम है, लेकिन कुछ चेतावनी हैं: पहले, आपको न केवल अधिक राम चाहिए, आपको एक तेज़ चाहिए। धीमी और सस्ते रैम मॉड्यूल, जो शायद आपको एक सामान्य शास्त्रीय मामले में सूट करेंगे, एक समस्या पैदा कर सकते हैं। सीपीयू फ्रंट-साइड बस को भी ध्यान में रखा जाना चाहिए: यहां तक ​​कि जब आप एक धीमी सीपीयू आवृत्ति हो सकते हैं, लेकिन एक तेज़ एफएसबी आवृत्ति आपके पूर्णता में बहुत सुधार करेगी। दूसरी चिंता zRam स्वैप विभाजन की एक संख्या है। 1 से अपने CPU कोर नंबर की संख्या का प्रयास करें। सिंगल-कोर सिस्टम पर उपयोग न करें!
एलेक्सी वेसनिन

सभी को अच्छे अंक मिले। जैसा कि मैं एक प्रदर्शन geek और हमेशा डिजाइन और अपने सिस्टम का निर्माण, मैं व्यक्तिगत रूप से इस तरह की चिंताओं से ग्रस्त नहीं हूँ
एल्डर गीक

@ElderGeek मुझे भी :) आपसे मिलकर अच्छा लगा! इसके अलावा मैंने zRam व्यवहार में एक अजीब बात पर गौर किया है। यह अलग-अलग कर्नेल संस्करणों में दिखाई देता है और गायब हो जाता है, लेकिन कर्नेल एचजेड 100 और 1000 पर अत्यधिक पुनरुत्पादनीय है। zRam 1,2,4 के लिए ठीक काम करता है - लेकिन अधिक विभाजन नहीं। यहां तक ​​कि लगभग-निष्क्रिय कार्यों पर शीर्ष हार्डवेयर पर 8 और 16 भौतिक कोर। तो यह ध्यान में रखें कि tweaks के साथ खेल रहे हैं! रूस से नमस्ते!
एलेक्सी वेसनिन

मैं असहमत हूँ "यदि आप एक db चलाते हैं, ... आपको कभी भी किसी भी प्रकार की अदला-बदली को सक्षम नहीं करना चाहिए, चाहे आपके पास जो भी राम पर्वत हो"। स्वैपिंग आमतौर पर यादृच्छिक प्रक्रियाओं को मारने वाले OOM हत्यारे के लिए बेहतर है। हां, आपके पास जो एप्लिकेशन चल रहे हैं, उनके लिए आपके पास पर्याप्त मेमोरी होनी चाहिए और हां, बड़ी मात्रा में स्वैप का उपयोग करने से आपके सिस्टम की गति धीमी हो सकती है। मैं तुम्हें एक आदर्श दुनिया में रहने से ईर्ष्या करता हूं।
AMADANON Inc.

5

यह बताने का कोई तरीका नहीं है कि क्या आपको स्वैप स्पेस की आवश्यकता है या नहीं अगर हमें पता है कि एकमात्र पैरामीटर रैम की मात्रा स्थापित है।

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

  • केस 1: यदि आपके पास कोई स्वैप स्थान नहीं है और रैम से बाहर होने की संभावना है, तो लिनक्स कर्नेल एक या एक से अधिक प्रक्रियाओं को चुन लेगा जो यह सोचते हैं कि अच्छे उम्मीदवार हैं और उन्हें मार दें।

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

मैं हमेशा केस 2 को पसंद करता हूं, क्योंकि मुझे लगता है कि अनकंफर्टेबल लूज़िंग पार्ट्स या मेरे सारे काम खत्म हो गए हैं क्योंकि कर्नेल को लगता है कि मेरे ऐप्स मारने लायक हैं। इसके अलावा, एक औसत डिस्क के वर्तमान आकार के टीबी श्रेणी में होने के कारण, स्वैप के लिए कुछ प्रतिशत जमा करना एक मुद्दा नहीं होना चाहिए।


6
मैं केस 1 को पसंद करता हूं, क्योंकि जब मैं रैम से बाहर निकलता हूं, तब ही जब मुझे रनवे प्रोग्राम मिल जाता है। OOM किलर आम तौर पर रनवे की पहचान करने में बहुत अच्छा होता है, और मैं वास्तव में इसके बजाय इसे कुछ घंटों के भारी गमागमन के बाद तुरंत मार देता हूं।
मार्क

1
@ मर्क, यह एक वैध बिंदु है। मैं अभी भी एक एल्गोरिथ्म को पहले शूट करने से बचने की कोशिश करता हूं, बाद में सोचता हूं।
२०:४० बजे

2
केस 2 केवल तभी मान्य है जब आपके पास कुछ ऐसा हो जो आपको इस स्थिति के बारे में चेतावनी दे, और सिस्टम के स्वैप से बाहर निकलने से पहले मैन्युअल रूप से "कुछ करने" के लिए पर्याप्त समय हो। लेकिन आप बदले में एक ही परिणाम के लिए उपयोग की गई RAM के प्रतिशत की निगरानी कर सकते हैं।
टॉटर

1
आपके तर्क के आधार पर, रैम उपयोग की निगरानी करना पर्याप्त है
टॉटर

1
@ मैं अपने लैपटॉप मॉनिटरिंग ऐप द्वारा रात के बीच में जागृत नहीं होना पसंद करता हूं क्योंकि मैंने एक बैच लॉन्च किया है जो फाइलों के एक समूह को संसाधित करता है और रैम को समाप्त करता है। मैं नौकरी करना पसंद करता हूं, भले ही रैम के कारण पूरे सामान को बाधित करने की तुलना में कुछ घंटे लगते हों।
जूलियाग्रे

3

किसी भी प्रणाली में स्वैप लागू करने का मेरा नियम है कि इसके लिए उत्तर दिया जाए:

  • प्रणाली का उद्देश्य क्या है?
  • एप्लिकेशन कितनी मेमोरी का उपभोग करेंगे?
  • क्या यह एक महत्वपूर्ण प्रणाली है?
  • क्या मुझे फ़ाइलों के हस्तांतरण के लिए एक अस्थायी डिस्क स्थान की आवश्यकता है?
  • अनुप्रयोगों की अनुमानित वृद्धि दर?

जब मुझे इस जानकारी के लिए उत्तर मिलता है तो मैं तदनुसार प्रणाली को आकार देता हूं। पिछले वर्षों में मैं सन माइक्रोसिस्टम से अंगूठे का नियम बना रहा था। SWAP के लिए 16 GB तक दो बार, 16 GB तक एक ही राशि से। लेकिन दूसरी ओर, यदि आपके पास पर्याप्त रैम है और आपके ऐप्स SWAP का उपयोग जबरन नहीं करते हैं तो आप स्वैप को छोड़ सकते हैं। अगर आपको जरूरत है तो बस एक नई डिस्क या लुन लगाने की और स्वाप को कॉन्फ़िगर करने की। सूर्य का नियम अधिकतर इसलिए लागू होता है क्योंकि "कर्नेल पैनिक" के मामले में सोलारिस पर मेमोरी को आगे के विश्लेषण के लिए पूरी तरह से स्वैप किया जाएगा।


1

यदि आपके पास अपने सभी कार्यक्रमों को चलाने के लिए पर्याप्त रैम नहीं है, तो स्वैप की आवश्यकता होगी ।

आप कहते हैं कि आप ऐसा कुछ भी नहीं कर रहे हैं जिसमें बहुत अधिक रैम की आवश्यकता हो। तो, आपके पास पर्याप्त रैम है।

फिर, आपको स्वैप स्थान की आवश्यकता नहीं है।

लेकिन , अगर आपको लगता है कि किसी बिंदु पर, आप अपने प्रश्न में क्या करते हैं, इसके बावजूद, आपके प्रोग्राम का उपयोग करेंगे, तो अपनी रैम (अंगूठे का नियम) का आधा (या दो तिहाई) कहेंगे, तो कृपया दूसरे को "प्रो-स्वैप" पढ़ें “जवाब देता है। आपको स्वैप की आवश्यकता नहीं होगी , लेकिन यह आपके सिस्टम के प्रदर्शन को बढ़ा सकता है ।


स्वैप का उपयोग करना एक भयावह दुर्घटना से बचने में मदद कर सकता है, लेकिन कभी भी सुधार नहीं करेगा, किसी भी पैराशूट से अधिक फेरारी को गति देगा। ;-)
एल्डर गीक

@ ElderGeek यह एक किनारे का मामला हो सकता है, लेकिन स्वैप मदद कर सकता है। ऐसे समय होते हैं जहां आपके पास हर चीज के लिए बस पर्याप्त रैम होती है, लेकिन रैम के बेहतर उपयोग के लिए निष्क्रिय कार्यक्रमों की अदला-बदली की जा सकती है (जैसे कुछ उपयोगी डिस्क कैश)। मैं 90 के दशक के अंत में इसे बहुत देखता था। मुझे यह कभी-कभी तब दिखाई देता है जब मेरे पास वास्तव में स्वैप स्पेस की आवश्यकता के बिना <1GB मुफ्त रैम (डिस्क कैश सहित) होता है।
jbo5112

@ jbo5112 मैं पूरी तरह से संभावना से इंकार नहीं करूंगा यदि आप ऐसा कहते हैं, तो मेरा अनुभव अन्यथा इस प्रकार दिखा है। यह बहुत आश्चर्य की बात नहीं है क्योंकि यह इस बात का मामला है कि सिस्टम को एक कठिन और तेज नियम से अधिक कैसे उपयोग किया जाता है (जो कि हर किसी को लगता है)।
एल्डर गीक

@ElderGeek मैं इसे अभी देख सकता हूं क्योंकि मेरे डिस्क एक दशक पुराने हैं और कैश की सख्त जरूरत है। आमतौर पर स्वप्नदोष की एक अतिरिक्त समस्या है जो लगभग किसी भी मामले के लिए बहुत अधिक है, जिसके कारण स्वैप स्थान का उपयोग आक्रामक तरीके से किया जाता है। मूल्य को 60 से घटाकर 10 करना एक सामान्य अनुशंसा है। आप कम भी जा सकते हैं, लेकिन कुछ बिंदु पर आप बहुत अधिक डिस्क कैश डंप करेंगे, जिससे स्वैप करते समय बहुत अधिक अतिरिक्त I / O हो जाएगा।
jbo5112

@ jbo5112 अच्छी बात है। यह हमेशा अलग-अलग उप-प्रणालियों के बीच संतुलन बनाने वाला कार्य है। मुझे याद है कि सीगेट ST225 और ST238 ड्राइव के साथ 80286 सिस्टम में से अधिकतम प्रदर्शन को निचोड़ने के लिए हार्ड डिस्क इंटरलेव और रैम रिफ्रेश रेट जैसे थिम्स को समायोजित करना। हमें हमेशा अधिकतम प्रदर्शन और विश्वसनीयता को निचोड़ने के लिए मामले के आधार पर चीजों पर संपर्क करना होता है। बधाई BTW! पिछली बार जब मैं एक दशक से बाहर निकलने में सक्षम था, तो यह एक माइक्रोपोलिस था जिसने कुल 600 एमबी का भव्य आयोजन किया था।
एल्डर गीक

0

संक्षिप्त उत्तर:

हां, आपको हमेशा स्वैप की आवश्यकता होती है, बस इस संभावना में कि कोई एप्लिकेशन मैपिंग मेमोरी को परेशान नहीं करता है लेकिन सीधे वर्चुअल मेमोरी को मैप करता है।

अपनी स्वैप फ़ाइल को यहां सेट करें:

  • RAM+round(sqrt(RAM)) यदि आप हाइबरनेशन का उपयोग करते हैं
  • round(sqrt(RAM)) अगर तुम नहीं

अपने swappiness10 को डेस्कटॉप पर सेट करें , लेकिन सर्वर पर नहीं!

लंबे उत्तर:

भूतकाल में:

पिछले 25 वर्षों के लिए उपयोग में अंगूठे का नियम न्यूनतम 1xRAM और अधिकतम 2xRAM रहा है, जो कि आप हर समय उद्धृत देखेंगे।

उस न्यूनतम समय को पाषाण युग में वापस सेट किया गया था जब मैं एक किशोर था और डायनासोर अभी भी पृथ्वी पर घूमते थे और क्योंकि रैम अभी बहुत महंगा था और आपको कुछ भी पूरा करने में सक्षम होने के लिए उस स्वैप स्थान की आवश्यकता थी।

उस समय अधिकतम रिटर्न कम होने के कारण सेट किया गया था: यह बहुत धीमी गति से स्वैप करने के लिए बहुत धीमी है क्योंकि एचडीडी का उपयोग 1000 धीमी है तो राम का एक कारक है: एक आपात स्थिति में अच्छा है, लेकिन रोजमर्रा के उपयोग के लिए वास्तव में अच्छा नहीं है! उस समय, जब आप स्वैप स्थान से बाहर भागे थे, तो अधिक रैम जोड़ने का समय था! (जो आज भी सत्य है)।

वर्तमान में:

  1. यदि आप हाइबरनेशन का उपयोग नहीं करते हैं और आपकी मेमोरी 1GByte से अधिक है, तो अंगूठे का नया नियम वह है round(sqrt(RAM))जहाँ RAMस्पष्ट रूप से GB में आपके RAM का आकार है।

  2. यदि आप हाइबरनेशन का उपयोग करते हैं, तो आपको रैम की पूरी मात्रा को स्वैप करने में सक्षम होना चाहिए + पहले से ही डिस्क को रैम को स्वैप करना, इस प्रकार सूत्र बन जाता है: RAM+round(sqrt(RAM))

  3. कम रिटर्न का नियम आज भी अधिकतम के लिए है, लेकिन जब तक आप अपने वास्तविक उपयोग का परीक्षण नहीं करते हैं , तब तक 2xRAM लेना डिस्क स्थान की बर्बादी है , इसलिए जब तक आप अन्य कार्यप्रणालियों का उपयोग करके स्वैप स्थान से बाहर चलाने के लिए अधिकतम उपयोग न करें ।

ये सभी मिलकर आपको निम्न तालिका देते हैं: (पिछले 3 कॉलम स्वैप स्पेस को दर्शाते हुए)

    RAM   No hibernation    With Hibernation    Maximum
    1GB              1GB                 2GB        2GB
    2GB              1GB                 3GB        4GB
    3GB              2GB                 5GB        6GB
    4GB              2GB                 6GB        8GB
    5GB              2GB                 7GB       10GB
    6GB              2GB                 8GB       12GB
    8GB              3GB                11GB       16GB
   12GB              3GB                15GB       24GB
   16GB              4GB                20GB       32GB
   24GB              5GB                29GB       48GB
   32GB              6GB                38GB       64GB
   64GB              8GB                72GB      128GB
  128GB             11GB               139GB      256GB
  256GB             16GB               272GB      512GB
  512GB             23GB               535GB        1TB
    1TB             32GB              1056GB        2TB

ऊपर सिर्फ अंगूठे का एक नियम है; यह गुरुत्वाकर्षण का नियम नहीं है! यदि आपके विशेष उपयोग का मामला अलग है, तो
आप इस नियम (गुरुत्वाकर्षण के नियम के विपरीत) को तोड़ सकते हैं !

प्रो टिप: हमेशा एक HDD की शुरुआत में SWAP आवंटित करें क्योंकि डिस्क के अंदर सिर को कम स्थानांतरित करने की आवश्यकता होती है।
हां: SSDs पर, यह वास्तव में किसी भी अधिक मायने नहीं रखता है जहां आप स्वैप क्षेत्र का पता लगाते हैं क्योंकि वे मूविंग हेडलाइन के बजाय क्वांटम-टनलिंग का उपयोग करते हैं और आधुनिक SSDs क्वांटम क्षरण को रोकने के लिए अपने सभी मेमोरी सेल्स (यहां तक ​​कि बिना स्पेस के) का उपयोग करते हैं।

परीक्षण कैसे करें यदि आपके स्वैप का उपयोग "सामान्य" नियम से अलग है:

बस निष्पादित करें:

for szFile in /proc/*/status ; do 
  awk '/VmSwap|Name/{printf $2 "\t" $3}END{ print "" }' $szFile 
done | sort --key 2 --numeric --reverse | more

जो आपको बाहर चलने वाले सभी कार्यक्रमों की एक सूची देगा (शीर्ष पर सबसे अधिक स्वैप स्थान का उपयोग करने वाला)

यदि आप अधिक उपयोग कर रहे हैं तो कुछ केबी: अधिक से अधिक आकार दें तो न्यूनतम, अन्यथा, परेशान न करें ...

यदि आप अभी सर्वर पर पढ़ना बंद कर रहे हैं: तो आप पूरी तरह तैयार हैं!


यदि आप एक डेस्कटॉप / लैपटॉप क्लाइंट (सर्वर नहीं) पर हैं, तो आप चाहते हैं कि आपका GUI यथासंभव संवेदनशील हो और जब आप वास्तव में हो तो केवल स्वैप करें । उबंटू को सर्वर के उपयोग के लिए जल्दी स्वैप करने के लिए अनुकूलित किया गया है, लेकिन अपने क्लाइंट पर आप संपादन करना चाहते हैं कि विशाल 250 मेगा-पिक्सेल कच्ची तस्वीरgimpswappiness शीघ्रता से हो , इसलिए आपके 10 पर सेट करने से कर्नेल बहुत जल्दी स्वैप हो जाएगा, जबकि यह सुनिश्चित नहीं करता है ' टी स्वैप बहुत देर:

sudo nano /etc/sysctl.conf

और जोड़:

# change "swappiness" from default 60 to 10 
# (theoretically only swap when RAM usage reaches around 80 or 90 percent)
vm.swappiness = 10

फ़ाइल के अंत में, फ़ाइल ( Ctrl+ XY+ Enterनैनो में) सहेजें और निष्पादित करें:

sysctl --system

पैरामीटर को पुनः लोड करने के लिए या सिर्फ पुराने समय के लिए, विंडो $ अप्रोच लें और रिबूट करें ... :-)


-1

समझौता जवाब: यह "चाहिए" के अर्थ पर निर्भर करता है।

क्या आपको इस अर्थ में एक स्वैप विभाजन की आवश्यकता है कि आपके द्वारा वर्णित ऑपरेटिंग शर्तों के तहत एक नहीं होने पर कुछ बुरा होगा? नहीं।

यह बुद्धिमानी है कि यदि आप गलती से मेमोरी हॉग की एक सेना को छोड़ देते हैं, तो आपके पास एक स्वैप विभाजन है, ताकि आपके पास OOM हत्यारे को मारने से पहले उन्हें मारने का मौका हो? हाँ।

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

सारांश में, यह बहुत अच्छा है कि आपके पास 16 जीबी रैम है। लेकिन, अगर आपके पास 1TB डिस्क भी है, तो क्या आप इसमें से 16GB को स्वैप नहीं कर सकते? यह डिस्क का केवल 1.5% है।

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