Jak dodać swap do instancji EC2?

293

Obecnie korzystam z mikro instancji ec2 i okazało się, że w instancji czasami brakuje pamięci.

Co innego można zrobić, niż używając większego rozmiaru instancji?

ajtrichards
źródło

Odpowiedzi:

574

Rozwiązaniem tego problemu jest dodanie swap(tj. paging) Miejsca do instancji.

Stronicowanie polega na utworzeniu obszaru na dysku twardym i wykorzystaniu go jako dodatkowej pamięci. Pamięć ta jest znacznie wolniejsza niż zwykła pamięć, jednak dostępnych jest znacznie więcej.

Aby dodać tę dodatkową przestrzeń do instancji, wpisz:

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

Jeśli potrzebujesz więcej niż 1024, zmień to na coś wyższego.

Aby włączyć ją domyślnie po ponownym uruchomieniu, dodaj tę linię do / etc / fstab:

/var/swap.1   swap    swap    defaults        0   0
ajtrichards
źródło
Czy mógłbyś wyjaśnić, co to znaczy „if = ...”, „of = ...”, bs = 1M i count = 1024, ponieważ nigdy nie widziałem if, of i = na liście argumentów.
ア レ ッ ク ス
31
ifoznacza „plik wejściowy”, ofoznacza „plik wyjściowy”, bsoznacza „rozmiar bloku” i countjest liczbą bloków, które chcesz przydzielić… możesz przeczytać manstronę polecenia, aby uzyskać więcej informacji: linux.die.net/man/1/ dd
Fábio Batista
4
Ten wiersz polecenia dd oznacza „skopiuj z / dev / zero do /var/swap.1. Zrób to, czytając 1024 bloki o rozmiarze 1 megabajta”. To szybki sposób na utworzenie pliku 1 GB pełnego zer.
Nelson
3
wystarczająco stary, ale moja pamięć wymiany pozostaje w 0% używana nawet po ponownym uruchomieniu, jakaś pomoc?
Girdhari Agrawal
3
Jeśli chcesz sprawdzić, czy zamiana jest aktywna:$> free -m
herve
216

Zamiana powinna odbywać się na dysku Instance Storage (efemerycznym), a nie na urządzeniu EBS. Zamiana spowoduje wiele IO i zwiększy koszty EBS. EBS działa również wolniej niż Sklep Instancji, a Sklep Instancji jest dostępny bezpłatnie z niektórymi typami Instancji EC2 .

Zwykle będzie montowany w / mnt, ale jeśli nie zostanie uruchomiony

sudo mount /dev/xvda2 /mnt

Aby następnie utworzyć plik wymiany na tym urządzeniu, wykonaj następujące czynności dla pliku wymiany 4 GB

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

Upewnij się, że żaden inny użytkownik nie może wyświetlić pliku wymiany

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

Zrób i oflaguj jako swap

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

Dodaj / Upewnij się, że w / etc / fstab znajdują się następujące elementy

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

wreszcie włącz zamianę

sudo swapon -a
David
źródło
6
jest to zdecydowanie najbardziej wyczerpująca odpowiedź imo
Jon B
4
Aby zamontować system plików, należy określić typ systemu plików. Aby znaleźć system plików, polecenie to: $ df -T Wyświetli to urządzenia i ich systemy plików. Głównie ext4. Dla mnie było to / dev / xvda1, a nie 2.
użytkownik1452686
8
Według docs.aws.amazon.com/AWSEC2/latest/UserGuide/… nie można już dodawać sklepów instancji do instancji t1 / t2. Niezależnie od tego, wydaje się, że to prawda.
baranina Do
3
@alfetopito Prawdopodobnie możesz utworzyć dosłowny plik wymiany na istniejącej partycji zamiast dodawać inną partycję jako swap. Przewodnik miły dla Centosu 6 - digitalocean.com/community/tutorials/...
muttonUp
1
Według Amazona nie ma gwarancji, że zachowasz pamięć instancji po ponownym uruchomieniu, czy więc fstab nie zawiedzie?
podwójny
42

Po zastosowaniu kroków wymienionych przez ajtrichards możesz sprawdzić, czy Twoja instancja amazonu w warstwie wolnej używa swap za pomocą tego polecenia

cat /proc/meminfo

wynik:

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

Swap Razem: 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
źródło
40

Możesz dodać swap 1 GB do instancji za pomocą następujących poleceń:

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

Aby włączyć ją domyślnie po ponownym uruchomieniu, dodaj ten wiersz do /etc/fstab:

/swapfile swap swap defaults 0 0
David Levesque
źródło
Ale z którego mojego systemu plików zajmie miejsce na utworzenie wymiany?
Hussain
@Hussain Spowoduje to utworzenie wymiany w głównym systemie plików, ponieważ ścieżka jest /swapfile. Ale możesz również zamontować inny system plików i utworzyć tam plik wymiany, np /mnt/blah/swapfile.
David Levesque,
Może potwierdzić, że działa to w instancji t2.micro. Zrobiłem mój @ / mnt / swap, ponieważ lubię czysty root.
Mike Purcell,
1
Poparłem tę odpowiedź, ponieważ jest najkrótsza i spełnia swoje zadanie. Należy jednak dodać polecenie swapfile chmod 600.
Sõber
15

Jeśli jesteś na t2instancji ( t2.micro, t2.medium, t2.small), nie ma efemeryczne lub instancja przechowywania dostępne. Musisz więc po prostu utworzyć swap, w EBSktórym w zależności od przypadku użycia może, ale nie musi być dobrym pomysłem. W przeciwnym razie postępuj zgodnie z odpowiedzią @David i utwórz swap na efemerycznym magazynie, aby uniknąć płacenia kosztów EBS.

Więcej informacji: http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/InstanceStorage.html znajduje się tabela, która pokazuje, ile efemerycznej pamięci masowej otrzymujesz dla każdego typu wystąpienia.

Ali
źródło
1
Potwierdzam, że jest to ogólnie zły pomysł. Jeśli masz proces, który idzie nieuczciwie (miałem do tego serwer węzła i konfigurację Pythona / selera), poniesiesz mnóstwo opłat, gdy przez cały tydzień czyta i zapisuje do twojego bloku EBS bez twojej wiedzy: -)
ZachM
3
Według aws.amazon.com/ebs/pricing , IO znajduje się we wszystkich woluminach EBS z wyjątkiem Provisioned IPOS SSD (io1). Ty tylko za GB. Mogła to być ostatnia zmiana w modelu cenowym - ale oznacza to, że chociaż EBS jest znacznie wolniejszy niż prawdziwa instancja Storace, nie ma żadnych dodatkowych opłat za odczyty i zapisy.
bobsoap
@bobsoap Czy mógłbyś to wyjaśnić? Sprawdziłem twój link i znalazłem to 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.. Co wydaje się, że AWS pobierze opłaty za operacje odczytu i zapisu.
Valter Silva
2
@ValterHenrique Cytowany tekst dotyczy tylko woluminów wyposażonych w IOPS, ale masz do wyboru kilka różnych typów woluminów. Jeśli korzystasz z „normalnego” woluminu bez skonfigurowanego IOPS (takiego jak typ woluminu SSD ogólnego przeznaczenia o nazwie „gp2”), operacje odczytu i zapisu nie są dodatkowo naliczane. Może lepszy link do porównania: aws.amazon.com/ebs/details
bobsoap
8

Możesz utworzyć przestrzeń wymiany, wykonując następujące kroki Tutaj tworzymy swap w /home/

  1. dd if=/dev/zero of=/home/swapfile1 bs=1024 count=8388608
    Tutaj liczba jest liczbą kilobajtów przestrzeni wymiany

  2. mkswap /home/swapfile1

  3. vi /etc/fstab
    dokonać wpisu:
    /home/swapfile1 swap swap defaults 0 0

  4. biegać:
    swapon -a

minhas23
źródło
4

Możemy dodać przestrzeń wymiany na dowolnym serwerze

utwórz plik za pomocą polecenia dd

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

bs jest wielkością bloku, a liczba odnosi się do rozmiaru w MB lub GB

możemy użyć odwrotnie

Po utworzeniu zmień uprawnienia do pliku:

 #chmod 600 /swapfile 

Następnie makewap plik:

 #mkswap /swapfile 

Następnie włącz plik wymiany poleceniem swapon:

 #swapon  /swapfile 

Sprawdź za pomocą bezpłatnego polecenia, czy zamiana jest włączona, czy nie:

 #free -h
 #swapon -s
Javeed Shakeel
źródło
3

Korzystanie z magazynu instancji Davida odpowiedź początkowo działała dla mnie (na m5d.2xlarge), jednak po zatrzymaniu instancji EC2 i ponownym jej włączeniu nie mogłem ponownie ssh do tej instancji.

Dzienniki instancji zgłosiły: „Jesteś w trybie awaryjnym. Po zalogowaniu wpisz„ journalctl -xb ”, aby wyświetlić dzienniki systemowe,„ systemctl reboot ”, aby ponownie uruchomić komputer,„ systemctl default ”lub„ exit ”, aby uruchomić komputer w trybie domyślnym. Naciśnij Enter do konserwacji ”

Zamiast tego postępowałem zgodnie z instrukcjami AWS w tym linku i wszystko działało idealnie, w tym po wyłączeniu i ponownym włączeniu instancji.

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
źródło
1

Wypróbuj swapspace http://pqxx.org/development/swapspace/

Większość dystrybucji ma to zapakowane.

W EC2 możesz chcieć zmienić „swappath” na dysk / mnt lub high-iops.

rdoroshenko
źródło
1
Z dokumentacji: „W obecnej formie Swapspace prawdopodobnie nie jest dobrym wyborem dla systemów, które muszą cały czas reagować;”
Dave Albert
-3

Możesz użyć następującego skryptu, aby dodać swap w Amazon Linux.

https://github.com/chetankapoor/swap

Pobierz skrypt za pomocą wget:

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

Następnie uruchom skrypt w następującym formacie:

sh swap.sh 2G

Kompletny samouczek można odwiedzić:

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

Chetan kapoor
źródło
Nie rozumiem, do czego przyczynia się ta odpowiedź, poza tym, że jestem skryptem powłoki, który w zasadzie robi to, co już zaakceptowała zaakceptowana odpowiedź.
Nils Werner
Właśnie utworzyłem skrypt powłoki, który oszczędza czas, więc będą dwa kroki, aby utworzyć zamianę zamiast uruchamiać 5 poleceń, a jeśli zamiana już istnieje, pokaże, że zamiana już istnieje.
Chetan kapoor
3
Dokładnie. Skrypt shellscript, który mam uruchamiać jako root. Wykonane przez kogoś, co może się zmienić lub zniknąć bez powiadomienia. Wszystko, aby zapisać 4-5 wierszy poleceń, które zostały opublikowane i zaakceptowane 5 lat temu.
Nils Werner