CentOS 16GB RAM के लिए कितना SWAP है?


11

16GB RAM वाले दोहरे Quad Core XEON पर आप कितना SWAP इंस्टॉल करेंगे, जो mysql बैकएंड - मध्यम / भारी भार के साथ php वेबसाइट चलाने वाला है?

centos  swap 

जवाबों:


20

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


7
और याद रखें कि आप हमेशा बाद में और अधिक स्वैप स्थान जोड़ सकते हैं, अगर कुछ जगह बनाकर और एक नई मात्रा (यदि LVM का उपयोग करके) या किसी फ़ाइल को स्वैप के रूप में उपयोग करने की आवश्यकता हो, जैसेdd if=/dev/zero of=swap.file bs=1024 count=1048576; mkswap swap.file; swapon swap.file
डेविड स्पिललेट

3
साइड नोट के रूप में, आप / proc / sys / vm / swappiness मान को समायोजित करके स्वैपिंग की डिग्री को नियंत्रित कर सकते हैं।
डेविड

2
मैं यहाँ कुछ बिंदुओं से असहमत हूँ। । । सबसे पहले, डिस्क सस्ता है, आप उस पर जीबी के एक जोड़े को फेंक सकते हैं। दूसरी बात, यदि आप अशुभ होते हैं तो OOM किलर आपके पूरे बॉक्स को नीचे उतार सकता है। किसी भी तरह से इस पर भरोसा करना या OOM किलर को ट्रिगर करने के लिए बेहतर मानना ​​एक बहुत बुरा विचार है। यह सोचना कि एक संभावित hosed बॉक्स एक संभावित मंदी से बेहतर है एक बुरा विचार भी है। केवल वही समय उचित होगा जब आपके पास उस स्थिति के आसपास नियोजित एक बहुत विशिष्ट सेटअप हो।
क्रिस्टोफर कैशेल

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

वास्तव में एंड्रयू मोर्टन के अनुसार, प्रदर्शन एक स्वैगिल
जर्नीमैन गीक

8

मैं बहुत लंबे जवाब के लिए माफी मांगता हूं। मैं इस सामान को कुछ समय के लिए सुलभ रखना चाहता हूं!

TLDR; सैद्धांतिक रूप से बोलते हुए, उत्तर होगा "शायद निवासी मेमोरी की कुल राशि से कम नहीं है जो आपके सभी एप्लिकेशन उपयोग करना चाहते हैं"

अगर तुम मेरे साथ रहो तो मैं समझाने की कोशिश करूँगा।

वर्चुअल मेमोरी के बारे में थोड़ा सा

मुझे लगता है कि इन दिनों एक आम गलतफहमी है कि स्वैप का मूल्य क्या है और इसका उद्देश्य क्या है। यह अक्सर माना जाता है कि स्वैप का मतलब मेमोरी के लिए 'रिज़र्व बैंक' के रूप में होता है जब आपकी मेमोरी कम होती है। हां, यह आंशिक रूप से सही है, लेकिन कर्नेल फ्लॉप आपके स्वैप का उपयोग रिजर्व बैंक के रूप में करना चाहता है । इसके अतिरिक्त कर्नेल डिस्क को आपके द्वारा प्राप्त किए गए डेटा को प्राप्त करने के लिए कभी भी आमंत्रित नहीं करना चाहता है!

अनुप्रयोग स्थान में, कर्नेल को स्मृति में रखने वाली कई चीजों को ले जाएगा।

  • फ़ाइल डेटा मैप किया गया।
  • tmpfs filesystems।
  • रॉ एप्लीकेशन मेमोरी रनटाइम पर आवंटित की जाती है।
  • एप्लिकेशन कोड (जैसे ELF प्रारूपों के डेटा खंड में सामान)
  • निजी तौर पर mmaped फ़ाइल डेटा।

स्मृति प्रबंधन के उद्देश्य के लिए, मेमोरी आवंटन किसी सहायक उपकरण द्वारा किसी न किसी रूप में समर्थित है।

फ़ाइल समर्थित मेमोरी वह मेमोरी है जो एक फाइल से आई है और एक विशिष्ट ओ / एस सिस्टम पर मेमोरी आवंटन का एक विशाल हिस्सा बनाती है। इसमें साझा लाइब्रेरी जैसी फाइलें शामिल हैं, जिन्हें लोड किया गया है, डिस्क से पढ़ी गई फाइलें और पेज कैश में संग्रहीत हैं और डिस्क से mmaped फ़ाइलें हैं (वास्तव में, कर्नेल पेज कैश में फ़ाइलों के बीच पृष्ठों का कोई भेद नहीं करता है और फाइलें अनिवार्य रूप से मैप की गई हैं वही चीज़)।

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

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

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

सबसे खराब स्थिति

सबसे खराब स्थिति तब होती है जब यह नियंत्रण से बाहर होने वाले सर्वर पर आता है और OOMing इस तथ्य पर आधारित होता है कि स्मृति आवंटन अनुरोधों को सम्मानित करने की तुलना में I / O अनुरोधों को संभालने में बहुत अधिक समय खर्च होता है। दो शर्तें हैं जो इस मानदंड को लागू कर सकती हैं।

  • मांग में पेज लाने के लिए हर समय अनाम मेमोरी को स्वैप करना, या किसी एप्लिकेशन के लिए अधिक पेज आवंटित करना।
  • डिस्क से डेटा प्राप्त करने में बहुत अधिक समय व्यतीत करना क्योंकि इसकी स्मृति में नहीं है जो आप CPU समय के लिए प्रक्रियाओं को निष्पादित करना चाहते हैं।

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

दूसरे को कम माना जाता है लेकिन उतना ही महत्वपूर्ण है। यदि आप अपनी सभी मेमोरी को वास्तविक एप्लिकेशन डेटा में आवंटित करते हैं - तो आप लंबे समय तक नहीं रहेंगे। लगभग हर एप्लिकेशन को संचालित करने के लिए फाइल सिस्टम से फाइलों को पढ़ने पर निर्भर करता है, ऐसा इसलिए हो सकता है क्योंकि कुछ निर्देश एक साझा पुस्तकालय में रहते हैं या क्योंकि आपको लाइब्रेरी कॉल, या किसी अन्य उद्देश्य के लिए /etc/resolv.conf पढ़ने की आवश्यकता है। एक ऑपरेटिंग सिस्टम को रोकने के लिए इसकी पूरी तरह से प्रशंसनीय - अभी तक आपके सभी अनुप्रयोगों को फिट करने के लिए पर्याप्त मेमोरी है, लेकिन चूंकि आपके कतारबद्ध होने के बाद मैं कुछ भी ठीक से पूरा करने का मौका नहीं देता।

कर्नेल आपके स्वैप के साथ क्या करना चाहता है

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

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

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

कर्नेल के लिए स्वैप का उपयोग क्या करना है

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

हालाँकि, मुझे यह इंगित करना चाहिए कि यदि आपने इतनी मेमोरी आवंटित की है कि कर्नेल के पास कोई विकल्प नहीं है, लेकिन ऐसा करने के लिए, यह सिस्टम एडमिनिस्ट्रेटर की एक कॉन्फ़िगरेशन समस्या है, न कि कर्नेल ही - यह सिर्फ सबसे अच्छा करने की कोशिश कर रहा है आपके द्वारा दिए गए विकल्प!

यदि आपके पास स्वैप की एक बड़ी मात्रा है, तो क्या आप इसका उपयोग करने का मौका बढ़ाते हैं?

नहीं! यदि आपके पास 1G का RAM और 4G स्वैप है, तो 80% संभावना नहीं है कि आपका डेटा स्वैप हो जाए! कर्नेल स्वैप का उपयोग केवल तब करना चाहता है जब मेमोरी में पृष्ठों को कुछ और करने के लिए बेहतर सेवा प्रदान की जा सकती है!

क्या यह फायदेमंद है कि स्वैप का उपयोग बिल्कुल न करें

मैं ऐसा कभी नहीं करूंगा। स्वैपिंग O / S को आपके द्वारा की जाने वाली मेमोरी से छुटकारा पाने की अनुमति देता है लेकिन कभी उपयोग में नहीं होता है। यदि आपके पास कोई स्वैप नहीं है, तो आपकी बस मेमोरी को निगलने से आप कभी भी पीछे नहीं हटेंगे, जिसके लिए आप कह सकते हैं कि पृष्ठ के पास इसे रखने की अनुमति देकर एक महत्वपूर्ण प्रदर्शन सुधार हो सकता है।

सबसे अच्छा स्वैप करने के लिए है

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

अगर मैं सब कुछ खतरनाक सही अधिकार स्वैप करने का अवसर मिलता है?

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

यदि आपकी स्वैपिंग एनॉन मेमोरी केवल अधिक अनाम मेमोरी से आवंटित करने के लिए है, तो आपके कुछ गलत करने और अधिक रैम की आवश्यकता है या वैसे भी अपने पुराने स्टैक को पुनःप्राप्त करने के लिए।

आपको कितनी रैम की आवश्यकता होगी

आपको अपने सभी एप्लिकेशनों को चलाने के लिए पर्याप्त रैम की अनुमति देने की आवश्यकता है, लेकिन पेजकेस में भरने के लिए आपको शायद 2 जी रैम की अतिरिक्त अनुमति देनी चाहिए - शायद अधिक। पेज कैश आपके कंप्यूटर को बहुत तेज़ बनाता है और आपके डिस्क लंबे समय तक चलता है। यदि वेबसर्वर को चलाने की आपकी सोच, पेजकेच के लिए और भी अधिक होने के कारण एक अच्छा विचार है, तो आप स्थिर सामग्री की भारी मात्रा के कारण, पेजकेच से पुनः प्राप्त कर सकते हैं और पुनः उपयोग कर सकते हैं, जो कि आपकी सेवा से बाहर हो जाएगा (यदि आपका वेबसर्वर थ्रूपुट 5mb / s है, तो आप वास्तव में नहीं करेंगे। उस 5mb / s सामग्री को आप अपने डिस्क से उत्पन्न करना चाहते हैं!)।

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

यदि आपका वास्तव में चिंतित है तो आप अपने पास से अधिक मेमोरी आवंटित कर सकते हैं:

  • अपनी स्वैप राशि को आप से अधिक नहीं RAM पर सेट करें
  • 2 पर सेट / खरीद / sys / vm / overcommit_memory
  • मूल्य / सेट / sys / vm / overcommit_ratio एक ऐसा मूल्य होना चाहिए जो वास्तव में कभी भी भौतिक RAM सीमा से अधिक न हो। यह जानने के लिए कि वह नंबर आपके लिए क्या होगा, यह जानने के लिए कर्नेल डॉक्यूमेंटेशन देखें ।

मेरे आवेदन के लिए मेरी स्मृति को ट्यून करने का सबसे अच्छा तरीका है

  • समझें कि वास्तव में स्वपन क्या करता है।
  • प्रति एप्लिकेशन को सही संसाधन आवंटित करने के लिए सीजीग्रुप का उपयोग करें।
  • ऑपरेटिंग सिस्टम को सख्त सीमाएँ लागू करने के लिए ऊपर उल्लिखित ओवरकमिट मोड को बदलें।
  • अनुप्रयोगों पर OOM प्राथमिकताओं को सेट करने के लिए ऊपर दिए गए cgroups का उपयोग करें जो आप वास्तव में रखना चाहते हैं यदि आपकी स्मृति और अनुप्रयोग से आप वास्तव में बाहर निकालना चाहते हैं यदि आपकी स्मृति से बाहर है।

विक्रेता एक अलग विन्यास की सिफारिश करता है ..

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

संक्षेप में

  • स्वैप का उपयोग व्यर्थ स्मृति डालने के लिए एक स्थान के रूप में किया जाता है। 'अतिरिक्त स्मृति' के रूप में नहीं
  • भारी मात्रा में अदला-बदली होने से आपके उपयोग की संभावनाओं पर कोई प्रभाव नहीं पड़ता है।
  • कर्नेल वास्तव में आपको अपने डेटा के लिए डिस्क तक पहुंचने से रोकना चाहता है। यह बस के रूप में लागू होता है - अगर यह कैश स्वैप करने के लिए उतना ही नहीं है जितना कि यह स्पेस स्वैप करता है।
  • कर्नेल आपके द्वारा चलाए जाने वाले ऐप्स को आपके द्वारा दी गई सेटिंग का सम्मान करने की पूरी कोशिश करेगा। लेकिन अगर आप 500 अपाचे बच्चों को सभी 32M मेमोरी ले रहे हैं, तो आपको आश्चर्य नहीं होगा। आपके द्वारा चुने गए कॉन्फ़िगरेशन का दोष, स्मृति प्रबंधन नहीं।

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

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


2

दस्तावेज़ से "Red Hat® Enterprise Linux® 5 परिनियोजन अनुशंसाओं पर Oracle 10g सर्वर"।

Oracle MetaLink Note 169706.1 में स्वैप के आकार के बारे में सामान्य सिफारिशें प्रदान करता है। इन सिफारिशों से बड़ी मात्रा में मेमोरी वाले सिस्टम पर बहुत बड़े स्वैप स्थान का निर्माण हो सकता है। बहुत बड़ी स्वैप गंभीर प्रणाली के प्रदर्शन में गिरावट का कारण बन सकती है और स्वैप स्थान को कम करके हल किया जा सकता है। Red Hat Red Hat Enterprise Linux 5 पर स्वैप के लिए 4GB से अधिक आवंटित करने की अनुशंसा नहीं करता है।

तो 16GB के लिए आपके पास 4GB से अधिक स्वैप नहीं होना चाहिए।

पुनश्च। यह भी ध्यान देने योग्य है कि oomपूरे I / O बैंडविड्थ का उपयोग करते हुए अनुपयोगी अदला-बदली प्रक्रिया से लगभग हमेशा बेहतर होता है।


0

वर्तमान CentOS स्वैप अनुशंसाएँ सूत्र का उपयोग करती हैं:

 M = Amount of RAM in GB, and S = Amount of swap in GB, then

If M < 2
    S = M *2
Else
    S = M + 2

तो 16 जी के लिए, स्वैप की मात्रा 18 जी होनी चाहिए।

Http://www.centos.org/docs/5/html/Deployment_Guide-en-US/ch-swapspace.html देखें


-1

मैं लिनक्स दस्तावेज़ से क्या याद करता हूँ: यदि आपका RAM 2gb से अधिक है तो आप स्वैप करते हैं = (ramSize + 2)। यदि यह कम है तो आप स्वैप करते हैं = (ramSize * 2)


-2

मुझे यह दस्तावेज़ आपके लिए मिला, इससे आपको यह निर्णय लेने में मदद मिलेगी, यहाँ यह है: स्वैप स्पेस क्या है? , लेकिन दोनों में से कोई भी उत्तर सही नहीं है


1
आपके द्वारा जोड़ा गया दस्तावेज़ स्वयं से सहमत नहीं है। "2Gb से अधिक रैम की 2Gb रैम राशि के लिए" के घोषित नियम के बाद 3 जी रैम के लिए 1Gb स्वैप (3-2 = 1) नहीं 5Gb होगा।
डेविड स्पिललेट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.