क्या मुझे पूरी तरह से linux webserver के लिए स्वैप बंद करना चाहिए?


22

हाल ही में मेरे मित्र ने मुझे बताया कि पर्याप्त स्मृति के साथ लिनक्स वेबसर्वर पर स्वैप को बंद करना एक अच्छा विचार है। मेरे सर्वर में 12 जीबी है और वर्तमान में पीक लोड के तहत 4 जीबी (कैश और बफ़र्स की गिनती नहीं) का उपयोग करता है।

उनका तर्क था कि एक सामान्य स्थिति में सर्वर कभी भी अपने सभी रैम का उपयोग नहीं करेगा, इसलिए इसका एकमात्र तरीका यह हो सकता है कि OutOfMemory स्थिति कुछ बग / ddos ​​/ etc के कारण है। तो अगर स्वैप बंद हो जाता है तो सिस्टम मेमोरी से बाहर चला जाएगा जो अंततः प्रोग्राम को हॉगिंग मेमोरी (सबसे अधिक संभावना वेब सर्वर प्रक्रिया) और शायद कुछ अन्य प्रक्रियाओं को क्रैश कर देगा। मामले में स्वैप चालू हैयह रैम और स्वैप दोनों को खाएगा और अंततः उसी दुर्घटना का परिणाम होगा, लेकिन इससे पहले कि यह sshd को स्वैप जैसी महत्वपूर्ण प्रक्रियाओं को बंद कर देगा और बहुत सारे स्वैप ऑपरेशन करना शुरू कर देगा, जिसके परिणामस्वरूप बड़ी मंदी होगी। इस तरह जब ddos ​​प्रणाली के तहत विशाल लैग के कारण पूरी तरह से अनुपयोगी स्थिति में जा सकता है और मैं शायद वेबसर्वर प्रक्रिया को लॉग इन करने और मारने में असमर्थ नहीं होगा या आने वाली सभी ट्रैफ़िक (सभी लेकिन ssh) को अस्वीकार कर सकता है।

क्या यह सही है? क्या मुझे कुछ याद आ रहा है (इस तथ्य की तरह कि स्वैप विभाजन किसी तरह से बहुत उपयोगी है, भले ही मेरे पास पर्याप्त रैम हो)? क्या मुझे इसे बंद कर देना चाहिए?


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

2
यह सोचना गलत है कि स्वैप विशेष रूप से 'रिजर्व' मेमोरी के लिए होता है। स्वैप का मतलब अप्रयुक्त मेमोरी लगाने के लिए है (ताकि आप अपनी वास्तविक मेमोरी को अधिक कुशलता से उपयोग कर सकें)। आपको हमेशा स्वैप करना चाहिए। यदि आपकी स्मृति से बाहर है, तो आपकी स्मृति से बाहर है - अवधि। यह क्षमता प्रबंधन की समस्या है - स्वैप करने की प्रवृत्ति नहीं। मेरे पास लंबे समय तक प्रतिक्रिया सर्वरफॉल्ट.com /a/ 332205 / 75118 है जो वर्चुअल मेमोरी के इरादों को बेहतर ढंग से समझाने की कोशिश करता है।
मैथ्यू इफ

जवाबों:


27

मैं कहूंगा कि यह आपके उपयोग के मामले पर निर्भर करता है और बाकी के जवाबों ने इसे बहुत अच्छी तरह से कवर किया है। 4 जी स्वैप कुछ सुरक्षा खरीदने के लिए सभी सस्ते तरीके के बाद हैं। और मुझे लगता है कि यह सस्तापन वह है जो लोगों को इसे बंद नहीं करना चाहता है।

लेकिन मुझे एक बयानबाजी के सवाल का जवाब देना चाहिए। यदि पैसा कोई समस्या नहीं है, और आपके पास दो प्रणालियों में से एक विकल्प है - 12G RAM और 4G स्वैप के साथ, और दूसरा 16G RAM और कोई स्वैप के साथ - तो आप किसे चुनेंगे? दुर्भाग्य से अधिकांश लोग अभी भी जवाब देंगे कि वे 16G RAM का चयन करेंगे और अभी भी 4 जी स्वैप जोड़ेंगे, जो मेरी बात याद कर रहा है।

और एक और नोट पर, मैं व्यक्तिगत रूप से एक दुर्घटनाग्रस्त प्रणाली की तुलना में एक खराब प्रणाली को देखता हूं। एक दुर्घटनाग्रस्त प्रणाली बहुत जल्दी लेने के लिए एक अतिरिक्त बैकअप सर्वर को ट्रिगर करेगी। और एक सक्रिय-सक्रिय (या संतुलित सेटअप लोड) में एक दुर्घटनाग्रस्त प्रणाली को बहुत जल्दी रोटेशन से बाहर ले जाया जाएगा। नो-स्वैप सिस्टम के लिए एक जीत फिर से।


14

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

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

मैंने इस पृष्ठ को स्वैप के बारे में बात करते हुए पाया । 3 खंड पर एक नजर है।

स्वैप बंद करने के बजाय, आप स्वपन को नियंत्रित कर सकते हैं ।


1
स्थिति में मैंने वर्णन किया कि यह स्वैप और रैम दोनों का उपभोग करेगा और दुर्घटनाग्रस्त भी होगा। यह कुछ महीनों से चल रहा है और इसने कभी भी 30% से अधिक मेमोरी का उपयोग नहीं किया है। इसलिए यह बहुत कम संभावना है कि यह सामान्य ऑपरेशन के दौरान इतनी जल्दी 100% तक उछल जाएगा। तो अगर कुछ प्रक्रिया पागल हो जाती है और 8GB की खपत होती है तो इसका मतलब है कि यह उतना ही मेमोरी का उपभोग करेगा जितना ओएस प्राप्त कर सकता है, इसका मतलब है कि यह सब।
पोमा

@Poma, स्वैप के अन्य लाभ भी हैं। इसके अलावा, जब आप स्वैप करते हैं, तो आप सिस्टम को अधिक समय तक रहने की अनुमति दे सकते हैं। ऐसा इसलिए है क्योंकि सस्ते एचडी ड्राइव की उपलब्धता को देखते हुए स्वैप मेमोरी से बड़ा हो सकता है।
खालिद

6

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

ulimit -d

प्रक्रिया से पहले या प्रक्रिया के समय से पहले डेटा खंड मेमोरी पर एक सीमा निर्धारित करने के लिए - और शायद थ्रेड्स की संख्या के लिए एक सीमा

ulimit -T

प्रति प्रक्रिया। ulimit आपका दोस्त है स्वैप बंद करने से पहले कृपया मेमोरी ट्यूनिंग गाइड में से एक को पढ़ने पर विचार करें। डॉस हमलों या बुरे कार्यक्रमों को संभालने की कोशिश करने के लिए आप कर्नेल पार्म्स को कुछ चीजों में बदल सकते हैं।

इसे इस तरह देखें: आपके सिस्टम की कुल मेमोरी RAM + स्वैप है। यदि आपके पास 12GB स्वैप है, तो आप बस स्वैप को अक्षम करके प्रभावी रूप से सिस्टम VM क्षमता को आधे में काट सकते हैं। बुरा विचार। यह एक बहस नहीं है, वास्तव में, यह बस पढ़ रहा है कि अन्य लोगों ने पिछले बुरे अनुभवों से वर्षों से क्या जाना है। यह संभव है कि आपके मित्र को कुछ पढ़ने की आवश्यकता हो।


5

जैसा कि दूसरों ने कहा है, आप "स्वैपीनेस" पैरामीटर के साथ छेड़छाड़ करके अपने सर्वर को प्रभावी ढंग से स्वैप को छोड़कर बंद कर सकते हैं। यह नियंत्रित करता है कि मेमोरी पेज को आक्रामक रूप से कर्नेल कैसे स्वैप करेगा।

आप देख सकते हैं कि वर्तमान में इसके साथ क्या सेट है:

cat /proc/sys/vm/swappiness

और आप इसे (रूट के रूप में) "लाइव" संपादित कर सकते हैं:

# echo "10" > /proc/sys/vm/swappiness

और इसे जारी रखने के लिए, निम्नलिखित को /etc/sysctl.conf में जोड़ें:

vm.swappiness=10

2

एक और अच्छी बात जो आप कर सकते हैं वह है zRAM का उपयोग करके RAM में स्वैप। मुझे लगता है कि यह एक महान विचार है! प्रदर्शन के लिए, बिल्कुल स्वैप नहीं होने जैसा है, लेकिन सिस्टम को बहुत लोड होने पर क्रैश से बचाता है!

इसे देखो:

http://www.webupd8.org/2011/10/increased-performance-in-linux-with.html

मेरा अनुभव: इस मशीन में, जहां मैं अभी लिख रहा हूं, मैंने स्वैप को अक्षम कर दिया है, क्योंकि मेरे पास 4Gb RAM है (2009 में यह बहुत अधिक था!)। मैंने केवल कुछ समस्याओं का अनुभव किया, उनमें से एक गलती से एक ही समय में 127 चित्रों की तरह खुल रहा था!

लेकिन .. यह एक कार्य केंद्र है, और अगर यह लटका हुआ है तो मैं रिबूट का खर्च उठा सकता हूं। एक सर्वर में मुझे लगता है कि स्वैप करना बेहतर है, और स्वैप-इन-रैम मुझे अच्छा लगता है।


1

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


0

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

इसके अलावा vm.swappiness आपको नियंत्रित करने में मदद कर सकता है कि डिस्क स्वैपिंग कितनी आक्रामक होती है।


0

यदि आप 0 से vm.swappiness को इनसेट करते हैं, तो इसका मतलब यह नहीं है कि सिस्टम स्वैप नहीं करेगा। यह निर्धारित करने के लिए एक पैरामीटर है कि कितना आक्रामक कर्नेल की प्रवृत्ति स्वैप करना होगा लेकिन यह स्वैप को बंद नहीं करता है।

फिर से, स्वैपिंग खराब नहीं है लेकिन थ्रैशिंग है। Sysstat डेटा पर एक नज़र डालें और उस पर बहुत अच्छा सूचक देना चाहिए।

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