ทำไมรูปภาพ EC2 อูบุนตูจึงไม่มี swap?


82

ฉันเริ่มต้นเซิร์ฟเวอร์คู่ใน EC2 และพวกเขาไม่มี swap

ฉันกำลังทำอะไรผิดหรือเป็นเพราะเครื่องไม่มีอะไรเลยหรือเปล่า?


ฉันสงสัยเช่นกัน แต่ฉันเพิ่งตั้งค่าอินสแตนซ์ EBS จัดรูปแบบเป็น swap และ swapon / dev / sdg ...
Tom O'Connor

นอกจากนี้ยังเป็นกรณีทั่วไปของการใช้ไดรฟ์ SSD บนระบบ Linux เพื่อไม่ให้ติดตั้ง swap บนไดรฟ์ SSD ส่วนใหญ่เป็นเพราะคนบางคนหวาดระแวงมันจะมีผลกระทบเชิงลบต่ออายุการเก็บข้อมูลของ SSD โดยการเจาะเซกเตอร์ชุดเดียวกันตลอดเวลา
djangofan

1
AMI ใดและขนาดอินสแตนซ์ EC2 ใด AMI ต้องได้รับการกำหนดค่าให้ใช้พาร์ติชันการสลับและอินสแตนซ์จะต้องมีการเพิ่มเมื่อเริ่มต้น
Jeremy Bouse

หากเป็นไปได้ทั้งหมดฉันแนะนำไม่ให้ใช้ swap บน EC2 เว้นแต่คุณจะแน่ใจว่า 99% คุณจะไม่ต้องใช้มัน (IE เป็นเพียงแค่ในกรณีฉุกเฉินเท่านั้น) เมื่อเราปิดการใช้งานการสลับกับอินสแตนซ์ EC2 บางส่วนค่าใช้จ่าย EBS IO รายเดือนของเราอาจลดลงครึ่งหนึ่ง เพียงแค่สองเซ็นต์ของฉันเพื่อช่วยให้คุณประหยัดสองเซ็นต์ - ใช่ที่น่ากลัวฉันขอโทษและจะไปซ่อนอยู่ในมุม;)
Smudge

คุณสามารถดูในขั้นตอนนี้docs.aws.amazon.com/AWSEC2/latest/UserGuide/ ......
Artem.Borysov

คำตอบ:


74

คุณถูกต้องรูปภาพ ECBS ของ Ubuntu EC2 ไม่ได้มาพร้อมกับพื้นที่สว็อปที่กำหนดค่า ( อย่างน้อย11.04 ) รูปภาพประเภทอินสแตนซ์ "ปกติ" จะมีพาร์ติชั่นการสลับแม้ว่าจะมีเพียง 896 MB สำหรับภาพที่ฉันทดสอบ

หากกระบวนการบางอย่างเกิดขึ้นและคุณไม่มีพื้นที่สว็อปเซิร์ฟเวอร์ของคุณอาจหยุดการรวบรวมข้อมูลชั่วขณะหนึ่งก่อนที่ OOM killer จะเข้ามาในขณะที่การสว็อปก็จะช้าลง ด้วยเหตุนี้ฉันมักจะมีพื้นที่สว็อปอยู่เสมอแม้มี RAM เพียงพอ นี่คือตัวเลือกของคุณ:

  • สร้างโวลุ่ม EBS (ขนาด RAM ของคุณ 2-4 เท่า) แนบกับอินสแตนซ์ของคุณ (ฉันชอบเรียกมันว่า / dev / xvdm สำหรับ "memory") sudo mkswap /dev/xvdmเพิ่มไปที่ fstab sudo swapon -aและคุณทำได้ดี . ฉันเคยทำมาก่อนและใช้งานได้ดี แต่มันอาจจะช้ากว่าอินสแตนซ์สโตร์เล็กน้อยเพราะมันผ่านเครือข่าย

  • หรือคุณอาจแบ่งพาร์ติชันดิสก์ของคุณใหม่เพื่อเพิ่มพาร์ติชั่นสว็อปแม้ว่านี่อาจต้องสร้าง AMI ใหม่ ฉันไม่สามารถทำสิ่งนี้ได้ในอินสแตนซ์ที่กำลังทำงานอยู่เนื่องจากฉันไม่สามารถถอนติดตั้งระบบไฟล์รูทและฉันไม่สามารถเข้าถึงอุปกรณ์ดิสก์ได้ (/ 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
    

    เสร็จสิ้น :) ฉันรู้ว่าผู้คนจำนวนมากรู้สึกอึดอัดใจกับการใช้ไฟล์แทนพาร์ติชัน แต่มันก็ใช้ได้ดีพอสำหรับพื้นที่สลับฉุกเฉิน


4
การสลับไปที่ปริมาณ EBS อาจส่งผลให้มีค่าใช้จ่ายเพิ่มเติมตามที่ระบุโดยคำตอบอื่น ๆ ไม่ได้ใช้การสลับหรือการสลับไปที่อินสแตนซ์สโตร์ดูเหมือนจะเป็นการแก้ปัญหาที่ดีกว่า
isuldor

7
การใช้ที่เก็บอินสแตนซ์เป็นตัวเลือกที่ดีกว่า EBS EBS เป็นระบบไฟล์เครือข่ายดังนั้นเชื่อมต่อกับอินสแตนซ์ EC2 ผ่านการเชื่อมต่อเครือข่ายเดียวกับทุกอย่าง ที่เก็บอินสแตนซ์ถูกต่อเข้ากับฮาร์ดแวร์ที่โฮสต์อินสแตนซ์ (นั่นคือสาเหตุที่ไม่เก็บเมื่อคุณหยุดและเริ่มอินสแตนซ์ของคุณ) เวลาเดียวที่ EBS เป็นตัวเลือกสำหรับการสลับคือเมื่อคุณใช้ประเภทอินสแตนซ์ที่ไม่ได้มาพร้อมกับที่เก็บอินสแตนซ์เช่น. t1.micro (ซึ่งให้ไว้มีเพียงประมาณ 620MB RAM น่าจะเป็นกรณีที่ต้องการฉุกเฉินจริงๆ สลับ)
ColtonCat

bs = 1M มีอยู่แล้วในรูปแบบไบนารีดังนั้นตัวคูณ count = 2048 ควรเป็น count = 2000 - ถ้าฉันไม่ผิด
ypocat

1
หากคุณกำลังใช้งาน 2GiB ดังนั้น 1024 * 2048 จะดูเหมือนว่าถูกต้อง
Jo Liss

25

ตำแหน่งที่ดีที่สุดสำหรับการแลกเปลี่ยน IMHO คืออินสแตนซ์สโตร์ ทำไม? AWS ไม่ได้เรียกเก็บเงินจากคุณสำหรับ i / o บนอินสแตนซ์สโตร์ นอกจากนี้อินสแตนซ์สโตร์ยังมีประสิทธิภาพมากกว่า EBS ในหลายกรณี ตรวจสอบให้แน่ใจว่าคุณมีสคริปต์ที่สร้างไฟล์สลับใหม่ในกรณีที่คุณหยุดอินสแตนซ์ รีบูตได้ดี ทำไมโอ้ทำไมมันถึงไม่มีโดยปริยาย?

ลองหาอินสแตนซ์สโตร์

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

Hurray ขนาด 160.1GB ฟรี! ใส่การแลกเปลี่ยนของคุณลงไปที่นั่นและลืมค่าบำรุงเกิน 100 $ ต่อเซิร์ฟเวอร์เมื่อการแลกเปลี่ยนที่อิงกับ EBS ของคุณเต็มไปด้วยความผิดพลาด ประสบการณ์ที่โชคร้ายพูดคุยที่นี่

เห็นได้ชัดในบางกรณีคุณไม่เห็นอินสแตนซ์สโตร์

ขึ้นอยู่กับชนิดของอินสแตนซ์ก่อนอื่นคุณต้องแนบไดรฟ์ข้อมูลที่เก็บอินสแตนซ์กับอินสแตนซ์โดยใช้ตัวเลือกการแมปอุปกรณ์บล็อก หากคุณไม่ทำเช่นนี้คุณอาจไม่เห็นอุปกรณ์ภายใต้ / dev (ตามวิธีการใช้ที่เก็บข้อมูล "Instance Store Volumes" ใน Amazon EC2 )


1
แค่ต้องการชี้ให้เห็นว่าผู้ใช้ t1.micro ในระดับฟรีไม่สามารถใช้ตัวเลือกนี้
รูเบนแอล

20

หมายเหตุ : Amazon ได้เปลี่ยนแปลงนโยบายการกำหนดราคาและไม่เรียกเก็บเงินสำหรับคำขอ I / O ตั้งแต่กลางปี ​​2559 คำตอบจะถูกเก็บไว้ที่นี่ด้วยเหตุผลทางประวัติศาสตร์ แต่ไม่มีผลกระทบค่าใช้จ่ายของการแลกเปลี่ยน (หรือไม่ได้ใช้) ในอินสแตนซ์ที่สำรองไว้ของ EC2 EBS


นี่คือโดยการออกแบบ การสลับถูกปิดใช้งานตามค่าเริ่มต้นในอินสแตนซ์ที่สนับสนุนโดย EBS ของ EC2 เพื่อหลีกเลี่ยงค่าใช้จ่ายที่คาดเดาไม่ได้

หากคุณมีแอพที่ใช้หน่วยความจำหิวมาก (เช่นในตัวเล็กหรือตัวเล็ก) มันสามารถสร้างคำขอ I / O จำนวนมากบนไดรฟ์ EBS ของคุณได้ Amazon ค่าใช้จ่าย $ 0.10 ต่อ 1 ล้านคนร้องขอ I / O (ดูhttp://aws.amazon.com/pricing/ebs/ )

ภายใต้สภาวะปกติคุณไม่ควรกังวล โดยปกติค่าใช้จ่ายของคำขอ I / O แม้ในกรณีที่มีขนาดเล็กไม่กี่ดอลลาร์ถ้าเป็นเช่นนั้น ดังนั้นหากคุณรู้ว่าคุณมีอินสแตนซ์ที่มีขนาดที่เหมาะสมและการแลกเปลี่ยนนั้นจะถูกใช้เพียงไม่นานให้ไปข้างหน้าและเปิดใช้งาน แต่ระวังด้วยกรณีเล็ก ๆ

หากคุณเปิดใช้งานการสลับคุณอาจต้องจับตารายงานการใช้งาน นอกจากนี้คุณยังสามารถตั้งค่าการแจ้งเตือนการเรียกเก็บเงินโดยไปที่แผงควบคุม CloudWatchและสร้างการเตือนภัยใหม่สำหรับจำนวนเงินที่เรียกเก็บทั้งหมด วิธีนี้คุณจะได้รับการแจ้งเตือนทันทีเป็นสิ่งที่แปลกที่เกิดขึ้นกับอินสแตนซ์ของคุณ


คำตอบนี้ทำให้เข้าใจผิดหรือสับสนเล็กน้อยเนื่องจากประเภทอินสแตนซ์ที่พบบ่อยที่สุดใช้โวลุ่ม SSD aws.amazon.com/ec2/instance-types
Taylor Edmiston

2
@tedmiston: แน่นอนคำตอบนี้ใช้ไม่ได้อีกต่อไป ฉันได้ปรับเพื่อสะท้อนความเป็นจริงใหม่ แต่โดยทั่วไปจะไม่มีการเรียกเก็บเงินสำหรับคำขอ I / O ดังนั้นการเปิดใช้งานการสลับ (หรือไม่) สามารถทำได้บนพื้นฐานทางเทคนิคที่บริสุทธิ์
Gui Ambros

1

ตรวจสอบ/etc/fstabไฟล์ซึ่งอาจถูกตั้งค่าโดยไม่มีการสลับในรูปภาพที่คุณใช้ ฉันคิดว่าบางคนทำงานโดยไม่มีการแลกเปลี่ยนสำหรับเซิร์ฟเวอร์เนื่องจากพวกเขาคาดหวังว่าจะไม่ใช้มากกว่าหน่วยความจำทั้งหมด - การสลับทำให้ทุกอย่างช้ามาก

อย่างไรก็ตามฉันมักจะหวาดระแวงเกี่ยวกับกระบวนการบางอย่างที่เกิดขึ้นในหน่วยความจำดังนั้นฉันคิดว่าคุณควรตั้งค่า swap drive และสร้างภาพจากอินสแตนซ์ ec2 ที่กำลังทำงานอยู่


2
การสลับเป็นครั้งคราวไม่ได้ทำให้ระบบช้า
laebshade

0

วิธีง่ายๆในการทำงานswapในEC2ภาพคือการใช้swapการบีบอัดที่มีlz4ในกับramzram-init

  • สคริปต์บริการที่มีอยู่สำหรับ&systemdopenrc

วิธีแก้ปัญหานี้ไม่ได้นำramไปใช้กับhost:

ป้อนคำอธิบายรูปภาพที่นี่


1
สร้างสรรค์มาก แต่จะไม่ใช้ RAM ของคุณเป็น RAM จริงกว่าจะใช้มันเป็นระบบไฟล์ในหน่วยความจำสำหรับการสลับหรือไม่ (ซึ่งส่วนใหญ่จะถูกใช้เมื่อคุณไม่มีหน่วยความจำเหลือน้อย) การลดจำนวนหน่วยความจำที่มีอยู่สำหรับแอปพลิเคชันเพื่อสร้าง swap ดูเหมือนจะไม่
ซับซ้อน

คำตอบที่น่าสนใจ แต่ฉันคิดว่าการใช้ EBS / instance store น่าจะเป็นวิธีแก้ปัญหาทั่วไปที่ดีกว่า ฉันมี t2.nano ที่มี 512MB RAM และ 512MB swap บน EBS ที่ใช้งานได้ดี
ทิม

การทำเช่นนี้จะใช้ RAM จากโฮสต์ (อินสแตนซ์ของ EC2) อย่างชัดเจน - RAM อื่นมาจากไหน ข้อดีเพียงอย่างเดียวของวิธีนี้คือการบีบอัด RAM ทั้งหมดของคุณ แต่ไม่สามารถใช้ SSD เป็น swap ได้ คุณสามารถใช้แทนzswapซึ่งมีแคช RAM บีบอัดที่ด้านบนของปกติแลกเปลี่ยนไฟล์ / ดิสก์: wiki.archlinux.org/index.php/zswap ดูcnx-software.com/2018/05/14/…สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ zram
RichVel
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.