Bagaimana Anda menambahkan swap ke instance EC2?

293

Saat ini saya sedang menjalankan instance mikro ec2 dan saya telah menemukan bahwa instance terkadang kehabisan memori.

Selain menggunakan ukuran instance yang lebih besar, apa lagi yang bisa dilakukan?

ajtrichards
sumber

Jawaban:

574

Perbaikan untuk masalah ini adalah menambahkan swap(yaitu paging) ruang ke instance.

Paging bekerja dengan membuat area pada hard drive Anda dan menggunakannya untuk memori tambahan, memori ini jauh lebih lambat dari memori normal namun lebih banyak tersedia.

Untuk menambahkan ruang ekstra ini ke instance Anda, Anda mengetik:

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

Jika Anda membutuhkan lebih dari 1024 maka ubah itu menjadi sesuatu yang lebih tinggi.

Untuk mengaktifkannya secara default setelah reboot, tambahkan baris ini ke / etc / fstab:

/var/swap.1   swap    swap    defaults        0   0
ajtrichards
sumber
Bisakah Anda jelaskan apa artinya "jika = ...", "dari = ...", bs = 1M dan hitung = 1024 karena saya belum pernah melihat if, of dan = dalam daftar argumen.
ア レ ッ ク ス
31
ifberarti 'file input', ofberarti 'file output', bsberarti 'ukuran blok' dan countjumlah blok yang ingin Anda alokasikan ... Anda dapat membaca manhalaman perintah untuk info lebih lanjut: linux.die.net/man/1/ dd
Fábio Batista
4
Baris perintah dd itu berarti "salin dari / dev / zero ke /var/swap.1. Lakukan itu dengan membaca 1024 blok ukuran 1 megabyte". Ini cara cepat untuk membuat file 1GB yang penuh dengan nol.
Nelson
3
cukup lama, tetapi memori swap saya tetap digunakan 0% bahkan setelah restart, ada bantuan?
Girdhari Agrawal
3
Jika Anda ingin memeriksa apakah swap aktif:$> free -m
herve
216

Swap harus dilakukan pada disk Instance Storage (ephemeral) dan bukan perangkat EBS. Swapping akan menyebabkan banyak IO dan akan meningkatkan biaya pada EBS. EBS juga lebih lambat daripada Instance Store dan Instance Store gratis dengan jenis Instance EC2 tertentu .

Biasanya akan di-mount ke / mnt tetapi jika tidak dijalankan

sudo mount /dev/xvda2 /mnt

Untuk kemudian membuat file swap pada perangkat ini lakukan hal berikut untuk swapfile 4GB

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

Pastikan tidak ada pengguna lain yang dapat melihat file swap

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

Jadikan dan Tandai sebagai swap

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

Tambahkan / Pastikan yang berikut ini ada di / etc / fstab Anda

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

Terakhir aktifkan swap

sudo swapon -a
David
sumber
6
ini jelas merupakan jawaban yang paling komprehensif
Jon B
4
Untuk memasang sistem file, seseorang harus menentukan jenis sistem file. Untuk menemukan sistem file perintahnya adalah: $ df -T Ini akan menunjukkan kepada Anda perangkat dan sistem file mereka. Kebanyakan ext4. Bagi saya itu adalah / dev / xvda1, bukan 2.
user1452686
8
Menurut docs.aws.amazon.com/AWSEC2/latest/UserGuide/... tidak mungkin lagi untuk menambahkan toko Instance ke instance t1 / t2. Setelah mencoba apa pun, tampaknya itu benar.
muttonUp
3
@alfetopito Anda mungkin dapat membuat swapfile literal pada partisi yang sudah ada alih-alih menambahkan partisi lain sebagai swap. Panduan yang bagus untuk Centos 6 - digitalocean.com/community/tutorials/…
muttonUp
1
Menurut Amazon, itu tidak dijamin bahwa Anda menyimpan penyimpanan instance Anda setelah reboot, bukankah fstab akan gagal?
dipadatkan
42

Setelah menerapkan langkah-langkah yang disebutkan oleh ajtrichards, Anda dapat memeriksa apakah instance amazon free tier Anda menggunakan swap menggunakan perintah ini

cat /proc/meminfo

hasil:

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
HimalayanCoder
sumber
40

Anda dapat menambahkan 1 GB swap ke instance Anda dengan perintah-perintah ini:

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

Untuk mengaktifkannya secara default setelah reboot, tambahkan baris ini ke /etc/fstab:

/swapfile swap swap defaults 0 0
David Levesque
sumber
Tetapi dari sistem file saya yang mana dibutuhkan ruang untuk membuat Swap?
Hussain
@Hussain Ini akan membuat swap di sistem file root karena pathnya /swapfile. Tetapi Anda juga bisa memasang sistem file lain dan membuat file swap di sana, misalnya /mnt/blah/swapfile.
David Levesque
Dapat mengkonfirmasi ini berfungsi pada instance t2.micro. Saya melakukan milik saya @ / mnt / swap karena saya suka root bersih.
Mike Purcell
1
Terpilih jawaban ini karena ini adalah yang terpendek dan melakukan pekerjaan. Namun, perintah swapfile chmod 600 harus ditambahkan.
27ber
15

Jika Anda berada di t2contoh ( t2.micro, t2.medium, t2.small), tidak ada fana atau contoh penyimpanan yang tersedia untuk Anda. Jadi, Anda hanya perlu membuat swap di EBSmana tergantung pada kasus penggunaan Anda mungkin atau mungkin bukan ide yang baik. Kalau tidak ikuti jawaban @vid, dan buat swap Anda di penyimpanan sementara untuk menghindari membayar biaya EBS.

Info lebih lanjut: http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/InstanceStorage.html ada tabel yang menunjukkan berapa banyak penyimpanan fana yang Anda dapatkan untuk setiap jenis instance.

Ali
sumber
1
Dapat mengkonfirmasi ini umumnya ide yang buruk. Jika Anda memiliki proses yang tidak benar (saya sudah punya server simpul melakukan itu, dan setup python / seledri), Anda akan dikenakan banyak biaya ketika membaca dan menulis ke blok EBS Anda sepanjang minggu tanpa Anda ketahui: -)
ZachM
3
Menurut aws.amazon.com/ebs/pricing , IO termasuk dalam semua volume EBS kecuali SSD IPOS yang disediakan (io1). Anda hanya per GB. Ini bisa menjadi perubahan baru dalam model penetapan harga - tetapi itu berarti bahwa meskipun EBS jauh lebih lambat daripada Instance Storace yang sebenarnya, tidak ada biaya tambahan untuk membaca dan menulis.
bobsoap
@obobap Bisakah Anda menjelaskannya? Saya telah memeriksa tautan Anda, dan menemukan ini 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.. Yang tampaknya AWS akan membebankan biaya untuk operasi baca dan tulis.
Valter Silva
2
@ValterHenrique Teks yang Anda kutip berlaku untuk volume dengan IOPS yang disediakan saja, tetapi Anda memiliki pilihan antara beberapa jenis volume dfferent. Jika Anda menggunakan volume "normal" tanpa IOPS yang disediakan (seperti jenis volume SSD serba guna yang disebut "gp2"), operasi baca dan tulis tidak dikenakan biaya tambahan. Mungkin tautan yang lebih baik untuk dibandingkan: aws.amazon.com/ebs/details
bobsoap
8

Anda dapat membuat ruang swap menggunakan langkah-langkah berikut Di sini kami membuat swap di /home/

  1. dd if=/dev/zero of=/home/swapfile1 bs=1024 count=8388608
    Di sini hitungan adalah hitungan kilobyte ruang swap

  2. mkswap /home/swapfile1

  3. vi /etc/fstab
    buat entri:
    /home/swapfile1 swap swap defaults 0 0

  4. Lari:
    swapon -a

minhas23
sumber
4

Kami dapat menambahkan ruang swap di server mana pun

buat file menggunakan perintah dd

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

bs adalah blocksize dan hitungan mengacu pada ukuran dalam MB atau GB

kita bisa menggunakan sebaliknya

Setelah pembuatan, ubah izin file:

 #chmod 600 /swapfile 

Kemudian buatwap file:

 #mkswap /swapfile 

Kemudian aktifkan file swap dengan perintah swapon:

 #swapon  /swapfile 

Periksa dengan perintah gratis apakah swap diaktifkan atau tidak:

 #free -h
 #swapon -s
Javeed Shakeel
sumber
3

Menggunakan jawaban David's Instance Storage awalnya bekerja untuk saya (pada m5d.2xlarge) namun, setelah menghentikan instance EC2 dan menyalakannya kembali, saya tidak dapat ssh ke instance lagi.

Log instance melaporkan: "Anda dalam mode darurat. Setelah masuk, ketik" journalctl -xb "untuk melihat log sistem," systemctl reboot "untuk reboot," systemctl default "atau" exit "untuk boot ke mode default. Tekan Enter untuk pemeliharaan "

Saya malah mengikuti instruksi AWS di tautan ini dan semuanya bekerja dengan baik, termasuk setelah mematikan instance dan lagi.

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
DaveJay
sumber
1

Coba swapspace http://pqxx.org/development/swapspace/

Sebagian besar distro telah dikemas.

Pada EC2 Anda mungkin ingin mengubah "swappath" ke / mnt atau disk iop tinggi.

rdoroshenko
sumber
1
Dari dokumen: "Dalam bentuk saat ini, Swapspace mungkin bukan pilihan yang baik untuk sistem yang harus tetap responsif setiap saat;"
Dave Albert
-3

Anda dapat menggunakan skrip berikut untuk menambahkan swap di Amazon Linux.

https://github.com/chetankapoor/swap

Unduh skrip menggunakan wget:

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

Kemudian jalankan skrip dengan format berikut:

sh swap.sh 2G

Untuk tutorial lengkap, Anda dapat mengunjungi:

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

Chetan kapoor
sumber
Saya tidak melihat kontribusi apa dari jawaban ini, selain hanya menjadi sebuah shellscript yang pada dasarnya melakukan apa yang sudah dijelaskan oleh jawaban yang diterima.
Nils Werner
Saya baru saja membuat skrip shell menghemat waktu sehingga akan ada 2 langkah untuk membuat swap daripada menjalankan 5 perintah dan jika swap sudah ada itu akan menunjukkan Anda swap sudah ada di sana.
Chetan kapoor
3
Persis. Sebuah shellscript yang seharusnya saya jalankan sebagai root. Dibuat oleh seseorang, di suatu tempat, yang mungkin berubah atau menghilang tanpa pemberitahuan. Semua untuk menyimpan 4-5 baris perintah yang diposting dan diterima 5 tahun yang lalu.
Nils Werner