คุณจะเพิ่ม swap ใน EC2 ได้อย่างไร


293

ฉันกำลังใช้งานอินสแตนซ์ขนาดเล็ก ec2 และฉันพบว่าอินสแตนซ์นั้นมีหน่วยความจำไม่เพียงพอในบางครั้ง

นอกเหนือจากการใช้อินสแตนซ์ที่ใหญ่กว่าจะมีอะไรอีกบ้างที่สามารถทำได้

คำตอบ:


574

การแก้ไขสำหรับปัญหานี้คือการเพิ่มพื้นที่swap(เช่นpaging) ให้กับอินสแตนซ์

เพจจิ้งทำงานโดยการสร้างพื้นที่บนฮาร์ดไดรฟ์ของคุณและใช้เพื่อเพิ่มหน่วยความจำหน่วยความจำนี้จะช้ากว่าหน่วยความจำปกติมาก แต่ก็มีอีกมาก

หากต้องการเพิ่มพื้นที่พิเศษให้กับอินสแตนซ์ของคุณให้พิมพ์:

sudo /bin/dd if=/dev/zero of=/var/swap.1 bs=1M count=1024
sudo /sbin/mkswap /var/swap.1
sudo chmod 600 /var/swap.1
sudo /sbin/swapon /var/swap.1

หากคุณต้องการมากกว่า 1024 ให้เปลี่ยนเป็นสิ่งที่สูงกว่า

หากต้องการเปิดใช้งานโดยค่าเริ่มต้นหลังจากรีบูตให้เพิ่มบรรทัดนี้ใน / etc / fstab:

/var/swap.1   swap    swap    defaults        0   0

คุณช่วยอธิบายหน่อยได้ไหมว่ามันหมายความว่า "if = ... ", "of = ... ", bs = 1M และ count = 1024 เพราะฉันไม่เคยเห็นถ้าของและ = ในรายการอาร์กิวเมนต์
アレックス

31
ifหมายถึง 'ไฟล์อินพุต' ofหมายถึง 'ไฟล์เอาต์พุต' bsหมายถึง 'ขนาดบล็อก' และcountเป็นจำนวนบล็อกที่คุณต้องการจัดสรร…คุณสามารถอ่านmanหน้าคำสั่งเพื่อรับข้อมูลเพิ่มเติม: linux.die.net/man/1/ วันที่
Fábio Batista

4
บรรทัดคำสั่ง dd นั้นหมายถึง "คัดลอกจาก / dev / ศูนย์ไปยัง /var/swap.1 ทำเช่นนั้นโดยการอ่าน 1024 บล็อกของขนาด 1 เมกะไบต์" เป็นวิธีที่รวดเร็วในการสร้างไฟล์ 1GB ซึ่งเต็มไปด้วยเลขศูนย์
เนลสัน

3
แก่พอ แต่หน่วยความจำสลับของฉันยังคงใช้อยู่ 0% แม้หลังจากรีสตาร์ทความช่วยเหลือใด ๆ
Girdhari Agrawal

3
หากคุณต้องการที่จะตรวจสอบว่าการแลกเปลี่ยนการใช้งาน:$> free -m
Herve

216

การสลับควรเกิดขึ้นบนดิสก์ Instance Storage (ephemeral) ไม่ใช่อุปกรณ์ EBS การแลกเปลี่ยนจะทำให้ IO จำนวนมากและจะเพิ่มค่าใช้จ่ายใน EBS EBS ยังช้ากว่าอินสแตนซ์ Store และอินสแตนซ์ร้านมาฟรีกับบางประเภทของอินสแตนซ์ EC2

โดยปกติจะติดตั้งที่ / mnt แต่หากไม่ได้ทำงาน

sudo mount /dev/xvda2 /mnt

หากต้องการสร้างไฟล์ swap บนอุปกรณ์นี้ให้ทำสิ่งต่อไปนี้สำหรับไฟล์ swap 4GB

sudo dd if=/dev/zero of=/mnt/swapfile bs=1M count=4096

ตรวจสอบให้แน่ใจว่าไม่มีผู้ใช้รายอื่นสามารถดูไฟล์สลับได้

sudo chown root:root /mnt/swapfile
sudo chmod 600 /mnt/swapfile

สร้างและตั้งค่าสถานะเป็นการแลกเปลี่ยน

sudo mkswap /mnt/swapfile
sudo swapon /mnt/swapfile

เพิ่ม / ตรวจสอบให้แน่ใจว่าสิ่งต่อไปนี้อยู่ใน / etc / fstab ของคุณ

/dev/xvda2      /mnt    auto    defaults,nobootwait,comment=cloudconfig 0   2
/mnt/swapfile swap swap defaults 0 0

เปิดใช้งาน swap ในที่สุด

sudo swapon -a

6
นี่เป็นคำตอบที่ครอบคลุมมากที่สุดแน่นอน
Jon B

4
ในการเมานต์ระบบไฟล์ต้องระบุประเภทระบบไฟล์ ในการค้นหาระบบไฟล์คำสั่งคือ: $ df -T นี่จะแสดงอุปกรณ์และระบบไฟล์ของคุณ ext4 เป็นส่วนใหญ่ สำหรับฉันมันคือ / dev / xvda1 ไม่ใช่ 2
user1452686

8
จากdocs.aws.amazon.com/AWSEC2/latest/UserGuide/ไม่สามารถเพิ่มที่เก็บ Instance ในอินสแตนซ์ t1 / t2 ได้อีกต่อไป หลังจากลองโดยไม่คำนึงว่ามันจะถูกต้อง
muttonUp

3
@alfetopito คุณสามารถสร้าง swapfile ตัวอักษรในพาร์ทิชันที่มีอยู่แทนการเพิ่มพาร์ทิชันอื่นเป็น swap คำแนะนำที่ดีสำหรับ Centos 6 - digitalocean.com/community/tutorials/…
muttonUp

1
ตามที่ Amazon ไม่รับประกันว่าคุณจะเก็บรักษาอินสแตนซ์ของคุณหลังจากรีบูตแล้ว fstab จะไม่ล้มเหลวเหรอ?
คู่เมื่อ

42

หลังจากใช้ขั้นตอนที่กล่าวถึงโดย ajtrichards คุณสามารถตรวจสอบว่าอินสแตนซ์เทียร์ amazon ฟรีของคุณกำลังใช้ swap โดยใช้คำสั่งนี้หรือไม่

cat /proc/meminfo

ผลลัพธ์:

ubuntu@ip-172-31-24-245:/$ cat /proc/meminfo
MemTotal:         604340 kB
MemFree:            8524 kB
Buffers:            3380 kB
Cached:           398316 kB
SwapCached:            0 kB
Active:           165476 kB
Inactive:         384556 kB
Active(anon):     141344 kB
Inactive(anon):     7248 kB
Active(file):      24132 kB
Inactive(file):   377308 kB
Unevictable:           0 kB
Mlocked:               0 kB

SwapTotal: 1048572 kB

SwapFree: 1048572 kB

Dirty:                 0 kB
Writeback:             0 kB
AnonPages:        148368 kB
Mapped:            14304 kB
Shmem:               256 kB
Slab:              26392 kB
SReclaimable:      18648 kB
SUnreclaim:         7744 kB
KernelStack:         736 kB
PageTables:         5060 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     1350740 kB
Committed_AS:     623908 kB
VmallocTotal:   34359738367 kB
VmallocUsed:        7420 kB
VmallocChunk:   34359728748 kB
HardwareCorrupted:     0 kB
AnonHugePages:         0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:      637952 kB
DirectMap2M:           0 kB

40

คุณสามารถเพิ่มการแลกเปลี่ยน 1 GB ในอินสแตนซ์ของคุณด้วยคำสั่งเหล่านี้:

sudo dd if=/dev/zero of=/swapfile bs=1M count=1024
sudo mkswap /swapfile
sudo swapon /swapfile

หากต้องการเปิดใช้งานเป็นค่าเริ่มต้นหลังจากรีบูตให้เพิ่มบรรทัดนี้ใน/etc/fstab:

/swapfile swap swap defaults 0 0

แต่ระบบไฟล์ของฉันจะใช้พื้นที่ว่างในการสร้าง Swap?
ฮุสเซน

@Hussain /swapfileมันจะสร้างการแลกเปลี่ยนในระบบแฟ้มรากตั้งแต่เส้นทางเป็น /mnt/blah/swapfileแต่คุณยังสามารถติดตั้งระบบแฟ้มอื่นและสร้างแฟ้มสลับมีเช่น
David Levesque

สามารถยืนยันการทำงานนี้ในอินสแตนซ์ t2.micro ฉันทำเหมือง @ / mnt / swap แม้ว่าฉันจะชอบรูทที่สะอาด
Mike Purcell

1
โหวตคำตอบนี้ขึ้นเพราะมันสั้นที่สุดและทำงานได้ดี อย่างไรก็ตามควรเพิ่มคำสั่ง swapfile chmod 600
Sober

15

ถ้าคุณอยู่ในt2อินสแตนซ์ ( t2.micro, t2.medium, t2.small) ไม่มีจีรังหรือตัวอย่างเช่นการจัดเก็บข้อมูลที่มีให้คุณ ดังนั้นคุณต้องสร้าง swap ของคุณEBSซึ่งขึ้นอยู่กับกรณีการใช้งานของคุณหรืออาจจะไม่ใช่ความคิดที่ดี มิฉะนั้นทำตามคำตอบของ @David และสร้าง swap ของคุณบนที่เก็บชั่วคราวเพื่อหลีกเลี่ยงการจ่ายค่าใช้จ่าย EBS

ข้อมูลเพิ่มเติม: http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/InstanceStorage.htmlมีตารางที่แสดงจำนวนที่เก็บข้อมูลชั่วคราวที่คุณได้รับสำหรับอินสแตนซ์แต่ละประเภท


1
สามารถยืนยันได้ว่านี่เป็นความคิดที่ไม่ดี หากคุณมีกระบวนการที่หลอกลวง (ฉันมีโหนดเซิร์ฟเวอร์ทำเช่นนั้นและการติดตั้ง python / celery) คุณจะต้องเสียค่าใช้จ่ายเป็นจำนวนมากเมื่อมีการอ่านและเขียนบล็อก EBS ของคุณทุกสัปดาห์โดยที่คุณไม่รู้ตัว: -)
ZachM

3
อ้างอิงจากaws.amazon.com/ebs/pricing , IO รวมอยู่ในโวลุ่ม EBS ทั้งหมดยกเว้น IPOS SSD ที่จัดสรร (io1) คุณต่อ GB เท่านั้น นี่อาจเป็นการเปลี่ยนแปลงรูปแบบการกำหนดราคาล่าสุด - แต่หมายความว่าแม้ว่า EBS จะช้ากว่าอินสแตนซ์ของ Storace จริง แต่ก็ไม่มีค่าใช้จ่ายเพิ่มเติมสำหรับการอ่านและเขียน
bobsoap

@bobsoap คุณจะอธิบายไหม? For example, if you provision a volume with 1000 IOPS, and keep this volume for 15 days in a 30 day month, then in a Region that charges $0.10 per provisioned IOPS-month, you would be charged $50 for the IOPS that you provision ($0.10 per provisioned IOPS-month * 1000 IOPS provisioned * 15 days/30). You will be charged for the IOPS provisioned on a volume even when the volume is detached from an instance.ผมได้ตรวจสอบการเชื่อมโยงของคุณและพบนี้ ซึ่งดูเหมือนว่า AWS จะเรียกเก็บเงินสำหรับการดำเนินการอ่านและเขียน
Valter Silva

2
@ValterHenrique ข้อความที่คุณอ้างถึงใช้กับวอลุ่มที่มี IOPS ที่จัดสรรไว้เท่านั้น แต่คุณมีตัวเลือกระหว่างประเภทวอลุ่ม dfferent หลายประเภท หากคุณใช้โวลุ่ม "ปกติ" ที่ไม่มี IOPS ที่จัดเตรียมไว้ (เช่นประเภทไดรฟ์ SSD อเนกประสงค์ที่เรียกว่า "gp2") การดำเนินการอ่านและเขียนจะไม่ถูกเรียกเก็บเงินเพิ่ม อาจจะเป็นลิงค์ที่ดีกว่าในการเปรียบเทียบ: aws.amazon.com/ebs/details
bobsoap

8

คุณสามารถสร้างพื้นที่สว็อปได้ตามขั้นตอนต่อไปนี้ที่นี่เรากำลังสร้างสวิตที่ /home/

  1. dd if=/dev/zero of=/home/swapfile1 bs=1024 count=8388608
    ที่นี่นับเป็นกิโลไบต์ของพื้นที่สว็อป

  2. mkswap /home/swapfile1

  3. vi /etc/fstab
    ทำรายการ:
    /home/swapfile1 swap swap defaults 0 0

  4. วิ่ง:
    swapon -a


4

เราสามารถเพิ่มพื้นที่สว็อปในเซิร์ฟเวอร์ใดก็ได้

สร้างไฟล์โดยใช้คำสั่ง dd

 #dd if=/dev/zero of=/swapfile bs=1M count=2048
                    or
 #dd if=/dev/zero of=/swapfile bs=1024M count=2

bs เป็นบล็อคและการนับหมายถึงขนาดเป็น MB หรือ GB

เราสามารถใช้ในทางกลับกัน

หลังจากการสร้างเปลี่ยนการอนุญาตของไฟล์:

 #chmod 600 /swapfile 

จากนั้นทำให้ไฟล์ wap:

 #mkswap /swapfile 

จากนั้นเปิดใช้งานไฟล์สลับด้วยคำสั่ง swapon:

 #swapon  /swapfile 

ตรวจสอบด้วยคำสั่งฟรีว่าจะเปิดใช้งานการสลับหรือไม่:

 #free -h
 #swapon -s

3

การใช้คำตอบของ David Instance Storage ในตอนแรกทำงานได้สำหรับฉัน (บน m5d.2xlarge) แต่หลังจากหยุดอินสแตนซ์ EC2 และเปิดใช้งานอีกครั้งฉันไม่สามารถ ssh กลับไปใช้อินสแตนซ์อีกครั้งได้

รายงานบันทึกอินสแตนซ์: "คุณอยู่ในโหมดฉุกเฉินหลังจากเข้าสู่ระบบพิมพ์" journalctl -xb "เพื่อดูบันทึกระบบ" systemctl reboot "เพื่อรีบูต" systemctl default "หรือ" exit "เพื่อบูตเข้าสู่โหมดเริ่มต้นกด Enter สำหรับการบำรุงรักษา "

ฉันทำตามคำแนะนำ AWS ในลิงค์นี้และทุกอย่างทำงานได้อย่างสมบูรณ์รวมถึงหลังจากปิดอินสแตนซ์แล้วเปิดใหม่

https://aws.amazon.com/premiumsupport/knowledge-center/ec2-memory-swap-file/

sudo dd if=/dev/zero of=/swapfile bs=1G count=4

sudo chmod 600 /swapfile

sudo mkswap /swapfile

sudo swapon /swapfile

sudo swapon -s

sudo vi /etc/fstab
/swapfile swap swap defaults 0 0

1

ลองswapspace http://pqxx.org/development/swapspace/

มี distros ส่วนใหญ่บรรจุอยู่

บน EC2 คุณอาจต้องการเปลี่ยน "swappath" เป็น / mnt หรือดิสก์ระดับสูง


1
จากเอกสาร: "ในรูปแบบปัจจุบัน Swapspace อาจไม่ใช่ตัวเลือกที่ดีสำหรับระบบที่ต้องตอบสนองตลอดเวลา"
Dave Albert

-3

คุณสามารถใช้สคริปต์ต่อไปนี้เพื่อเพิ่ม swap บน Amazon Linux

https://github.com/chetankapoor/swap

ดาวน์โหลดสคริปต์โดยใช้ wget:

wget https://raw.githubusercontent.com/chetankapoor/swap/master/swap.sh -O swap.sh

จากนั้นรันสคริปต์ด้วยรูปแบบต่อไปนี้:

sh swap.sh 2G

สำหรับบทแนะนำที่สมบูรณ์คุณสามารถไปที่:

https://installvirtual.com/shell-script-to-create-swap/


ฉันไม่เห็นว่าคำตอบนี้ก่อให้เกิดอะไรนอกจากเพียงแค่การใช้เปลือกหอยซึ่งโดยทั่วไปแล้วจะทำในสิ่งที่คำตอบที่ยอมรับแล้วได้อธิบายแล้ว
Nils Werner

ฉันเพิ่งสร้างเชลล์สคริปต์ช่วยประหยัดเวลาดังนั้นจะมี 2 ขั้นตอนในการสร้าง swap แทนที่จะรัน 5 คำสั่งและหากมี swap อยู่แล้วมันจะแสดงให้คุณทราบว่า swap มีอยู่แล้ว
Chetan Kapap

3
เผง shellscript ที่ฉันควรรันเป็น root ทำโดยใครบางคนที่อาจเปลี่ยนแปลงหรือหายไปโดยไม่ต้องแจ้งให้ทราบล่วงหน้า ทั้งหมดเพื่อบันทึกบรรทัดคำสั่ง 4-5 รายการที่โพสต์และยอมรับเมื่อ 5 ปีที่แล้ว
Nils Werner
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.