Jak dodać swap do instancji EC2?


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

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

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

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

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.


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


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

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


-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/


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.