EC2 ubuntu चित्रों में स्वैप क्यों नहीं है?


82

मैंने EC2 पर एक युगल सर्वर शुरू किया और उनके पास स्वैप नहीं है।

क्या मैं कुछ गलत कर रहा हूं या यह है कि मशीनों के पास कोई भी नहीं है?


मैंने सोचा कि यह भी है, लेकिन मैं अभी एक ईबीएस उदाहरण सेट करता हूं, इसे स्वैप के रूप में स्वरूपित करता हूं, और स्वप्न / देव / sdg ...
टॉम ओ'कॉनर

यह भी विशिष्ट है, SSD ड्राइव पर स्वैप स्वैप नहीं करने के लिए एक Linux सिस्टम पर SSD ड्राइव का उपयोग करने का मामला। ज्यादातर क्योंकि कुछ लोग पागल होते हैं, यह एक SSD के भंडारण जीवन पर नकारात्मक प्रभाव पड़ेगा जो कि हर समय एक ही सेक्टर को सेट करते हैं।
djangofan 20

1
क्या एएमआई और कौन सा ईसी 2 उदाहरण आकार। एएमआई को एक स्वैप विभाजन का उपयोग करने के लिए कॉन्फ़िगर करने की आवश्यकता है और उदाहरण के लिए इसे शुरू होने पर जोड़ा जाना चाहिए।
जेरेमी बोस

यदि संभव हो तो, मैं आपको EC2 पर स्वैप का उपयोग न करने की सलाह दूंगा जब तक कि आप 99% निश्चित नहीं हैं कि आपको इसका उपयोग नहीं करना होगा (IE यह केवल आपातकालीन स्थिति के लिए है)। जब हम अपने कुछ EC2 उदाहरणों पर स्वैप करते हैं, तो हमारी मासिक EBS IO लागत संभवत: आधी हो जाती है। बस मेरे दो सेंट आपको बचाने के लिए दो सेंट - हाँ जो भयानक था, मैं माफी मांगता हूं और एक कोने में छिप जाऊंगा;)
Smudge

आप इस चरण में भी देख सकते हैं docs.aws.amazon.com/AWSEC2/latest/UserGuide/…
Artem.Borysov

जवाबों:


74

आप सही कह रहे हैं, उबंटू EC2 EBS चित्र स्वैप स्पेस कॉन्फ़िगर ( 11.04 के लिए कम से कम) के साथ नहीं आते हैं । "नियमित" उदाहरण-प्रकार की छवियों में एक स्वैप विभाजन होता है, यद्यपि मैंने जो परीक्षण किया था उस पर केवल 896 एमबी है।

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

  • एक ईबीएस मात्रा (अपने रैम के आकार का 2-4 गुना) बनाएं, इसे अपने उदाहरण में संलग्न करें (मुझे इसे "मेमोरी के लिए देव / xvdm कहलाना पसंद है"), sudo mkswap /dev/xvdmइसे fstab में जोड़ें sudo swapon -a, और आप जाने के लिए अच्छे हैं । मैंने पहले भी ऐसा किया है और यह ठीक काम करता है, लेकिन यह संभवत: उदाहरण के लिए स्टोर की तुलना में थोड़ा धीमा है क्योंकि यह नेटवर्क पर चला जाता है।

  • या आप एक स्वैप विभाजन जोड़ने के लिए अपनी डिस्क को पुन: प्रारंभ करने में सक्षम हो सकते हैं, हालांकि इसके लिए एक नया एएमआई बनाने की आवश्यकता हो सकती है। मैं इसे एक रनिंग इंस्टेंस में नहीं कर पाया, क्योंकि मैं रूट फाइल सिस्टम को अनमाउंट नहीं कर सकता, और मुझे डिस्क डिवाइस (/ dev / xvda) तक भी एक्सेस नहीं है, केवल पार्टीशन (xvda1)।

  • या आप एक स्वैप फाइल बना सकते हैं। यह अभी मेरा पसंदीदा समाधान है।

    sudo dd if=/dev/zero of=/var/swapfile bs=1M count=2048 &&
    sudo chmod 600 /var/swapfile &&
    sudo mkswap /var/swapfile &&
    echo /var/swapfile none swap defaults 0 0 | sudo tee -a /etc/fstab &&
    sudo swapon -a
    

    किया हुआ। :) मुझे पता है कि बहुत से लोग विभाजन के बजाय फ़ाइलों का उपयोग करने के बारे में icky महसूस करते हैं, लेकिन यह निश्चित रूप से आपातकालीन स्वैप स्थान के रूप में अच्छी तरह से काम करता है।


4
ईबीएस वॉल्यूम में स्वैप करने पर अतिरिक्त लागत हो सकती है, जैसा कि अन्य उत्तरों से संकेत मिलता है। स्वैप का उपयोग नहीं करना, या एक उदाहरण की दुकान में स्वैप करना बेहतर समाधान की तरह लगता है।
isuldor

7
ईबीएस की तुलना में इंस्टेंट स्टोर का उपयोग करना बेहतर विकल्प है। ईबीएस एक नेटवर्क फाइल सिस्टम है, इसलिए ईसी 2 उदाहरण से उसी नेटवर्क कनेक्शन पर जुड़ता है जैसे कि सब कुछ। इंस्टेंस स्टोर उस हार्डवेयर से जुड़ा होता है जो इंस्टेंस होस्ट कर रहा होता है (इसीलिए जब आप रुकते हैं और अपना इंस्टेंस शुरू करते हैं तो यह जारी नहीं रहता है)। केवल उसी समय जब ईबीएस स्वैप का एक विकल्प होता है, जब आप एक इंस्टेंस प्रकार का उपयोग कर रहे होते हैं, जो इंस्टेंस स्टोरेज के साथ नहीं आता है। यानी, t1.micro (जिसने इसे केवल 620MB रैम दिया है, संभवतः वह है जिसे वास्तव में आपातकाल की आवश्यकता है स्वैप)।
कोल्टनकैट

Bs = 1M पहले से ही बाइनरी नोटेशन में है, इसलिए यदि मैं गलत नहीं हूँ तो गिनती = 2048 गुणक की गिनती = 2000 होनी चाहिए।
ypocat

1
यदि आप 2GiB के लिए जा रहे हैं, तो 1024 * 2048 सही लगता है।
जो लिस

25

स्वैप IMHO के लिए सबसे अच्छा स्थान उदाहरण की दुकान है। क्यों? उदाहरण-स्टोर पर AWS आपको i / o के लिए शुल्क नहीं देता है। इसके अलावा, ई-स्टोर कई मामलों में ईबीएस की तुलना में अधिक अच्छा है। बस सुनिश्चित करें कि आपके पास एक स्क्रिप्ट है जो स्वैप फ़ाइल को फिर से बनाता है यदि आप उदाहरण को रोकते हैं। रिबूट ठीक हैं। क्यों ओह, यह डिफ़ॉल्ट रूप से क्यों नहीं है?

आइए उदाहरण-स्टोर का पता लगाएं।

root@domU-**-**-**-**-**-**:/var/log# fdisk -l

[...]

Disk /dev/xvda2: 160.1 GB, 160104972288 bytes
255 heads, 63 sectors/track, 19464 cylinders, total 312705024 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Disk /dev/xvda2 doesn't contain a valid partition table

हुर्रे, 160.1GB मुफ्त में! अपनी स्वैप को वहां रखें और सर्वर पर 100 $ ओवरएज को भूल जाएं जब आपका ईबीएस-आधारित स्वैप गलती से झुंड में हो जाता है। यहां बात करने का दुर्भाग्यपूर्ण अनुभव।

जाहिरा तौर पर कुछ मामलों में आप इंस्टेंस-स्टोर नहीं देखते हैं।

उदाहरण प्रकार के आधार पर, आपको पहले ब्लॉक-डिवाइस-मैपिंग विकल्पों का उपयोग करके इंस्टेंस स्टोर वॉल्यूम को इंस्टेंस पर संलग्न करना होगा। यदि आप ऐसा नहीं करते हैं, तो आप भी डिवाइसों को / देव के तहत नहीं देख सकते हैं ( अमेज़न ईसी 2 में "इंस्टेंस स्टोर वॉल्यूम" स्टोरेज का उपयोग कैसे करें? )


1
बस यह बताना चाहते हैं कि t1.micro फ्री टियर पर उपयोगकर्ता इस विकल्प का उपयोग नहीं कर सकते हैं।
रूबेन एल।

20

नोट : अमेज़ॅन ने अपनी मूल्य नीति बदल दी है , और 2016 के मध्य के रूप में I / O अनुरोधों के लिए शुल्क नहीं लेता है। इसका जवाब यहां ऐतिहासिक कारणों से रखा गया है, लेकिन EC2 EBS- समर्थित इंस्टेंसेस पर स्वैप (या उपयोग न करने) के कोई भी निहितार्थ नहीं हैं।


यह डिजाइन द्वारा है। अप्रत्याशित लागतों से बचने के लिए EC2 EBS- समर्थित इंस्टेंस पर डिफ़ॉल्ट रूप से स्वैप बंद कर दिया जाता है।

यदि आपके पास एक मेमोरी-भूखा ऐप है जो दुष्ट (छोटे या छोटे उदाहरण पर) कहता है, तो यह आपके ईबीएस वॉल्यूम पर काफी मात्रा में I / O अनुरोध उत्पन्न कर सकता है। अमेज़ॅन $ 0.10 प्रति 1 मिलियन I / O अनुरोध ( http://aws.amazon.com/pricing/ebs/ देखें )

सामान्य परिस्थितियों में आपको इसकी चिंता नहीं करनी चाहिए; आमतौर पर आई / ओ अनुरोधों की लागत कुछ डॉलर के छोटे उदाहरणों पर भी होती है, यदि ऐसा है। इसलिए यदि आप जानते हैं कि आपके पास एक उचित आकार है और उस स्वैप का उपयोग केवल बार-बार किया जाएगा, तो आगे बढ़ें और इसे सक्षम करें। लेकिन छोटे उदाहरणों से सावधान रहें।

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


यह उत्तर थोड़ा भ्रामक है या मुझे भ्रमित करने वाला है क्योंकि सबसे आम उदाहरण एसएसडी संस्करणों का उपयोग करते हैं। aws.amazon.com/ec2/instance-types
टेलर

2
@stmiston: वास्तव में, यह उत्तर अब लागू नहीं है। मैंने नई वास्तविकता को प्रतिबिंबित करने के लिए समायोजित किया है, लेकिन मूल रूप से I / O अनुरोधों के लिए कोई शुल्क नहीं है, इसलिए स्वैप को सक्षम करना (या नहीं) अब एक शुद्ध तकनीकी आधार पर बनाया जा सकता है।
गुई एम्ब्रोस

1

/etc/fstabफ़ाइल की जाँच करें , वे संभवतः आपके द्वारा उपयोग की जा रही छवि में स्वैप के बिना सेट किए गए थे। मुझे लगता है कि कुछ लोग सर्वर के लिए स्वैप के बिना चलते हैं क्योंकि वे उम्मीद करते हैं कि वे कुल मेमोरी से अधिक का उपयोग कभी न करें - स्वैपिंग सब कुछ सुपर धीमा कर देती है।

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


2
समसामयिक स्वैपिंग सिस्टम को धीमा नहीं करता है।
laebshade

0

चलाने के लिए एक सरल समाधान swapमें EC2छवियों चलाना है swapसाथ संकुचित lz4में ramसाथ zram-init

  • सेवा स्क्रिप्ट systemd& के लिए उपलब्ध हैं openrc

इस समाधान से दूर नहीं ले ramजाता है host:

यहाँ छवि विवरण दर्ज करें


1
बहुत ही रचनात्मक, लेकिन आपके रैम का उपयोग वास्तविक रैम के रूप में नहीं किया जाएगा जो स्वैप के लिए इन-मेमोरी फ़ाइल-सिस्टम के रूप में उपयोग करने से अधिक समझ में आता है? (जो मुख्य रूप से उपयोग किया जाता है जब आप स्मृति से बाहर निकलते हैं) स्वैप बनाने के लिए अनुप्रयोगों के लिए उपलब्ध स्मृति की मात्रा को कम करने के लिए
प्रतिसादात्मक

दिलचस्प जवाब, लेकिन मुझे लगता है कि ईबीएस / इंस्टेंस स्टोर का उपयोग करना शायद एक बेहतर सामान्य उद्देश्य समाधान है। मेरे पास 512 एमबी रैम और 512 एमबी स्वैप के साथ ईबीएस है जो ठीक काम करता है।
टिम

यह होस्ट (EC2 उदाहरण) से स्पष्ट रूप से रैम लेता है - रैम और कहां से आ रहा है? इस दृष्टिकोण का एकमात्र लाभ आपके कुल रैम में से कुछ को संपीड़ित करना है, लेकिन यह एसएसडी को स्वैप के रूप में उपयोग करने की क्षमता प्रदान नहीं करता है। इसके बजाय आप उपयोग कर सकते हैं zswapजो सामान्य स्वैप फ़ाइल / डिस्क के शीर्ष पर संपीड़ित रैम कैश प्रदान करता है: wiki.archlinux.org/index.php/zswapZam पर अधिक के लिए cnx-software.com/2018/05/14/… देखें ।
रिचवेल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.