Mengapa gambar ubuntu EC2 tidak memiliki swap?

82

Saya memulai beberapa server di EC2 dan mereka tidak memiliki swap.

Apakah saya melakukan sesuatu yang salah atau apakah mesin itu tidak memilikinya?

rafamvc
sumber
Saya juga bertanya-tanya, tapi saya baru saja membuat instance EBS, memformatnya sebagai swap, dan swapon / dev / sdg ...
Tom O'Connor
Ini juga khas, kasus menggunakan drive SSD pada sistem Linux untuk tidak men-setup swap pada drive SSD. Sebagian besar karena beberapa orang paranoid itu akan berdampak negatif pada masa penyimpanan SSD dengan mengebor sektor yang sama sepanjang waktu.
Djangofan
1
Apa AMI dan ukuran instance EC2 mana. AMI perlu dikonfigurasikan untuk menggunakan partisi swap dan instance harus menambahkannya saat dijalankan.
Jeremy Bouse
Jika memungkinkan, saya sarankan untuk tidak menggunakan swap pada EC2 kecuali Anda 99% yakin Anda tidak perlu menggunakannya (IE hanya ada untuk keadaan darurat). Ketika kami menonaktifkan swap pada beberapa instance EC2 kami, biaya EBS IO bulanan kami mungkin berkurang setengahnya. Hanya dua sen saya untuk menyelamatkan Anda dua sen - ya itu mengerikan, saya minta maaf dan akan bersembunyi di sudut;)
Smudge
Anda juga dapat melihat dalam langkah-langkah ini docs.aws.amazon.com/AWSEC2/latest/UserGuide/…
Artem.Borysov

Jawaban:

74

Anda benar, gambar EBS Ubuntu EC2 tidak datang dengan ruang swap yang dikonfigurasi ( setidaknya untuk 11,04 ). Gambar tipe "biasa" memang memiliki partisi swap, meskipun hanya 896 MB pada yang saya uji.

Jika beberapa proses meledak dan Anda tidak memiliki ruang swap, server Anda bisa berhenti merangkak untuk sementara waktu sebelum pembunuh OOM menendang, sedangkan dengan swap, itu hanya akan lambat. Untuk alasan itu, saya selalu suka memiliki ruang swap, bahkan dengan RAM yang cukup. Ini pilihanmu:

  • Buat volume EBS (2-4 kali ukuran RAM Anda), pasangkan ke instance Anda (saya suka memanggilnya / dev / xvdm untuk "memory") sudo mkswap /dev/xvdm,, tambahkan ke fstab sudo swapon -a,, dan Anda siap untuk menggunakannya . Saya telah melakukan ini sebelumnya dan berfungsi dengan baik, tetapi mungkin sedikit lebih lambat daripada menyimpan contoh karena berjalan melalui jaringan.

  • Atau Anda mungkin dapat mempartisi ulang disk Anda untuk menambahkan partisi swap, meskipun ini mungkin memerlukan pembuatan AMI baru. Saya belum dapat melakukan ini dalam menjalankan contoh, karena saya tidak dapat meng-unmount sistem file root, dan saya bahkan tidak memiliki akses ke perangkat disk (/ dev / xvda), hanya partisi (xvda1).

  • Atau Anda dapat membuat file swap. Ini adalah solusi pilihan saya saat ini.

    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
    

    Selesai. :) Saya tahu banyak orang merasa jijik menggunakan file, bukan partisi, tapi itu pasti berfungsi cukup baik sebagai ruang swap darurat.

Jo Liss
sumber
4
Bertukar ke volume EBS dapat menghasilkan biaya tambahan, seperti ditunjukkan oleh jawaban lain. Tidak menggunakan swap, atau bertukar ke toko contoh sepertinya solusi yang lebih baik.
Isuldor
7
Menggunakan instance store adalah opsi yang lebih baik daripada EBS. EBS adalah sistem file jaringan, jadi terhubung ke instance EC2 melalui koneksi jaringan yang sama dengan yang lainnya. Instance store terlampir pada perangkat keras yang menjadi tuan rumah instance (itu sebabnya ia tidak bertahan ketika Anda berhenti dan memulai instance Anda). Satu-satunya saat EBS adalah opsi untuk swap adalah ketika Anda menggunakan tipe instance yang tidak datang dengan penyimpanan instance yaitu., T1.micro (yang diberikan hanya memiliki sekitar 620MB RAM mungkin adalah salah satu yang benar-benar membutuhkan keadaan darurat menukar).
ColtonCat
Bs = 1M sudah dalam notasi biner, jadi hitung = 2048 pengali harus hitung = 2000 - jika saya tidak salah.
ypocat
1
Jika Anda menggunakan 2GiB, maka 1024 * 2048 tampaknya benar.
Jo Liss
25

Lokasi terbaik untuk swap IMHO adalah toko contoh. Mengapa? AWS tidak membebankan biaya untuk i / o di toko contoh. Selain itu, toko contoh lebih performan daripada EBS dalam banyak kasus. Pastikan Anda memiliki skrip yang membuat ulang file swap seandainya Anda menghentikan instance. Reboot baik-baik saja. Kenapa oh mengapa tidak ada di sana secara default?

Mari kita cari toko contoh.

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

Hore, 160.1GB gratis! Masukkan swap Anda di sana dan lupakan kelebihan $ 100 per server ketika swap berbasis EBS Anda dipenuhi oleh kesalahan. Pengalaman malang berbicara di sini.

Tampaknya dalam beberapa kasus Anda tidak melihat toko contoh.

Bergantung pada jenis instance, Anda harus terlebih dahulu melampirkan volume penyimpanan instance ke instance dengan menggunakan opsi pemetaan blok perangkat. Jika Anda tidak melakukan ini, Anda bahkan mungkin tidak melihat perangkat di bawah / dev (sesuai Cara menggunakan penyimpanan "Instance Store Volumes" di Amazon EC2? )

sebwinadmin
sumber
1
hanya ingin menunjukkan bahwa pengguna t1.micro di tingkat gratis tidak dapat menggunakan opsi ini.
Reuben L.
20

Catatan : Amazon telah mengubah kebijakan penetapan harga mereka , dan tidak membebankan biaya untuk permintaan I / O pada pertengahan 2016. Jawabannya disimpan di sini karena alasan historis, tetapi tidak ada implikasi biaya untuk menggunakan (atau tidak menggunakan) swap pada instance EC2 yang didukung EBS.


Ini dengan desain. Swap dimatikan secara default pada instance EC2 yang didukung EBS, untuk menghindari biaya tak terduga.

Jika Anda memiliki aplikasi yang haus akan memori yang tidak berfungsi (misalnya, dalam jumlah kecil atau kecil), ia dapat menghasilkan permintaan I / O dalam jumlah yang cukup besar pada volume EBS Anda. Amazon mengenakan biaya $ 0,10 per 1 juta permintaan I / O (lihat http://aws.amazon.com/pricing/ebs/ ) .

Dalam kondisi normal Anda tidak perlu khawatir; biasanya biaya permintaan I / O bahkan pada kasus yang lebih kecil beberapa dolar, jika demikian. Jadi, jika Anda tahu Anda memiliki instance berukuran tepat dan swap itu hanya akan jarang digunakan, silakan dan aktifkan. Tapi hati-hati dengan contoh kecil.

Jika Anda mengaktifkan swap, Anda mungkin ingin mengawasi Laporan Penggunaan. Secara opsional, Anda juga dapat mengatur Pemberitahuan Tagihan dengan membuka Panel Kontrol CloudWatch dan membuat Alarm baru untuk jumlah total tagihan. Dengan cara ini, Anda akan segera diberi tahu bahwa ada sesuatu yang aneh dengan kejadian Anda.

Gui Ambros
sumber
Jawaban ini agak menyesatkan atau membingungkan saya karena jenis instance yang paling umum menggunakan volume SSD. aws.amazon.com/ec2/instance-types
Taylor Edmiston
2
@tedmiston: memang, jawaban ini tidak berlaku lagi. Saya telah menyesuaikan untuk mencerminkan kenyataan baru, tetapi pada dasarnya tidak ada biaya untuk permintaan I / O, jadi memungkinkan swap (atau tidak) sekarang dapat dibuat berdasarkan teknis murni.
Gui Ambros
1

Periksa /etc/fstabfile, mereka mungkin sudah diatur tanpa swap di gambar yang Anda gunakan. Saya pikir beberapa orang berjalan tanpa swap untuk server karena mereka berharap tidak pernah menggunakan lebih dari total memori - bertukar membuat semuanya super lambat.

Namun, saya selalu paranoid tentang beberapa proses yang membesar dalam memori, jadi saya pikir akan lebih bijaksana jika Anda hanya mengatur swap drive dan membuat ulang gambar dari instance EC2 yang berjalan.

ehsanul
sumber
2
Bertukar sesekali tidak membuat sistem menjadi lambat.
laebshade
0

Sebuah solusi sederhana untuk berjalan swapdi EC2gambar adalah untuk menjalankan swapdikompresi dengan lz4di ramdengan zram-init.

Solusi ini tidak mengambil ramdari host:

masukkan deskripsi gambar di sini

Stuart Cardall
sumber
1
Sangat kreatif, tetapi tidakkah menggunakan RAM sebagai RAM yang sebenarnya lebih masuk akal daripada menggunakannya sebagai sistem file dalam memori untuk swap? (yang terutama digunakan ketika Anda kehabisan memori) Mengurangi jumlah memori yang tersedia untuk aplikasi untuk membuat swap tampaknya berlawanan dengan intuisi ...
HBruijn
Jawaban yang menarik, tapi saya pikir menggunakan EBS / instance store mungkin merupakan solusi tujuan umum yang lebih baik. Saya memiliki t2.nano dengan RAM 512MB dan swap 512MB pada EBS yang berfungsi dengan baik.
Tim
Ini jelas mengambil RAM dari host (EC2 instance) - dari mana lagi RAM berasal? Satu-satunya manfaat dari pendekatan ini adalah untuk mengompres sebagian dari total RAM Anda, tetapi itu tidak memberikan kemampuan untuk menggunakan SSD sebagai swap. Anda bisa menggunakan zswapyang menyediakan cache RAM terkompresi di atas file swap / disk normal : wiki.archlinux.org/index.php/zswap . Lihat cnx-software.com/2018/05/14/… untuk lebih lanjut tentang zram.
RichVel