Wie fügt man einer EC2-Instanz einen Swap hinzu?

293

Ich verwende derzeit eine ec2-Mikroinstanz und habe festgestellt, dass der Instanz gelegentlich der Speicherplatz ausgeht.

Was kann außer der Verwendung einer größeren Instanz noch getan werden?

Ajtrichards
quelle

Antworten:

574

Eine Lösung für dieses Problem besteht darin , der Instanz Speicherplatz hinzuzufügen swap(dh paging).

Beim Paging wird ein Bereich auf Ihrer Festplatte erstellt und für zusätzlichen Speicher verwendet. Dieser Speicher ist viel langsamer als der normale Speicher, es ist jedoch viel mehr verfügbar.

Um diesen zusätzlichen Speicherplatz zu Ihrer Instanz hinzuzufügen, geben Sie Folgendes ein:

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

Wenn Sie mehr als 1024 benötigen, ändern Sie dies in etwas Höheres.

Fügen Sie diese Zeile zu / etc / fstab hinzu, um sie nach dem Neustart standardmäßig zu aktivieren:

/var/swap.1   swap    swap    defaults        0   0
Ajtrichards
quelle
Könnten Sie bitte erklären, was es bedeutet "wenn = ...", "von = ...", bs = 1M und count = 1024, weil ich nie gesehen habe, ob, von und = in der Argumentliste.
ス レ ッ ク ス
31
ifbedeutet "Eingabedatei", ofbedeutet "Ausgabedatei", bsbedeutet "Blockgröße" und countist die Anzahl der Blöcke, die Sie zuweisen möchten. manWeitere Informationen finden Sie auf der Seite des Befehls: linux.die.net/man/1/ dd
Fábio Batista
4
Diese dd-Befehlszeile bedeutet "Kopieren von / dev / zero nach /var/swap.1. Lesen Sie dazu 1024 Blöcke mit einer Größe von 1 Megabyte". Es ist eine schnelle Möglichkeit, eine 1-GB-Datei voller Nullen zu erstellen.
Nelson
3
genug alt, aber mein Swap-Speicher bleibt auch nach dem Neustart zu 0% belegt, Hilfe?
Girdhari Agrawal
3
Wenn Sie überprüfen möchten, ob der Swap aktiv ist:$> free -m
Herve
216

Der Austausch sollte auf der Instance Storage-Festplatte (kurzlebig) und nicht auf einem EBS-Gerät erfolgen. Das Austauschen verursacht viel IO und erhöht die Kosten für EBS. EBS ist auch langsamer als der Instance Store und der Instance Store ist mit bestimmten Arten von EC2-Instanzen kostenlos .

Es wird normalerweise auf / mnt gemountet, aber wenn nicht ausgeführt

sudo mount /dev/xvda2 /mnt

Um dann eine Auslagerungsdatei auf diesem Gerät zu erstellen, gehen Sie für eine 4-GB-Auslagerungsdatei wie folgt vor

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

Stellen Sie sicher, dass kein anderer Benutzer die Auslagerungsdatei anzeigen kann

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

Make and Flag als Tausch

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

Hinzufügen / Stellen Sie sicher, dass sich Folgendes in Ihrer / etc / fstab befindet

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

Zuletzt Swap aktivieren

sudo swapon -a
David
quelle
6
Dies ist definitiv die umfassendste Antwort imo
Jon B
4
Um ein Dateisystem bereitzustellen, muss der Dateisystemtyp angegeben werden. Um das Dateisystem zu finden, lautet der Befehl: $ df -T Dies zeigt Ihnen die Geräte und ihre Dateisysteme. Meistens ext4. Für mich war es / dev / xvda1, nicht 2.
user1452686
8
Laut docs.aws.amazon.com/AWSEC2/latest/UserGuide/… ist es nicht mehr möglich , Instanzspeicher zu t1 / t2-Instanzen hinzuzufügen. Nachdem Sie es trotzdem versucht haben, scheint es richtig zu sein.
Hammelfleisch
3
@alfetopito Sie können wahrscheinlich eine Literal-Auslagerungsdatei auf einer vorhandenen Partition erstellen, anstatt eine andere Partition als Auslagerung hinzuzufügen. Ein schöner Leitfaden für Centos 6 - digitalocean.com/community/tutorials/…
Hammelfleisch
1
Laut Amazon kann nicht garantiert werden, dass Sie Ihren Instanzspeicher nach dem Neustart behalten. Schlägt die fstab dann nicht fehl?
Dualed
42

Nachdem Sie die von ajtrichards genannten Schritte ausgeführt haben, können Sie mit diesem Befehl überprüfen, ob Ihre Amazon Free Tier-Instanz Swap verwendet

cat /proc/meminfo

Ergebnis:

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
quelle
40

Mit den folgenden Befehlen können Sie Ihrer Instanz einen 1-GB-Swap hinzufügen:

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

Fügen Sie diese Zeile hinzu, um sie nach dem Neustart standardmäßig zu aktivieren /etc/fstab:

/swapfile swap swap defaults 0 0
David Levesque
quelle
Aber von welchem ​​meiner Dateisysteme wird der Platz zum Erstellen von Swap benötigt?
Hussain
@Hussain Erstellt den Swap im Root-Dateisystem, da der Pfad lautet /swapfile. Sie können aber auch ein anderes Dateisystem mounten und dort die Auslagerungsdatei erstellen, z /mnt/blah/swapfile.
David Levesque
Kann bestätigen, dass dies auf einer t2.micro-Instanz funktioniert. Ich habe mein @ / mnt / swap gemacht, da ich eine saubere Wurzel mag.
Mike Purcell
1
Hat diese Antwort positiv bewertet, weil sie die kürzeste ist und die Arbeit erledigt. Der Befehl swapfile chmod 600 sollte jedoch hinzugefügt werden.
27.
15

Wenn Sie sind t2Instanzen ( t2.micro, t2.medium, t2.small), gibt es keinen kurzlebigen oder Instance - Speicher zur Verfügung. Sie müssen also nur Ihren Swap-In erstellenEBS dem je nach Anwendungsfall eine gute Idee sein kann oder nicht. Folgen Sie andernfalls der Antwort von @David und erstellen Sie Ihren Swap im kurzlebigen Speicher, um die Zahlung von EBS-Kosten zu vermeiden.

Weitere Informationen: http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/InstanceStorage.html In einer Tabelle wird angezeigt, wie viel kurzlebigen Speicher Sie für jeden Instanztyp erhalten.

Ali
quelle
1
Kann bestätigen, dass dies im Allgemeinen eine schlechte Idee ist. Wenn Sie einen Prozess haben, der nicht mehr funktioniert (ich habe das von einem Knotenserver und einem Python- / Sellerie-Setup ausführen lassen), fallen Ihnen eine Menge Gebühren an, wenn er die ganze Woche über in Ihren EBS-Block liest und schreibt, ohne dass Sie wissen: -)
ZachM
3
Laut aws.amazon.com/ebs/pricing ist IO in allen EBS-Volumes mit Ausnahme der Provisioned IPOS SSD (io1) enthalten. Sie nur pro GB. Dies könnte eine kürzlich erfolgte Änderung des Preismodells gewesen sein. Dies bedeutet jedoch, dass EBS zwar viel langsamer als der echte Instance Storace ist, jedoch keine zusätzlichen Gebühren für Lese- und Schreibvorgänge anfallen.
Bobsoap
@ Bobsoap Würde es Ihnen etwas ausmachen, das zu klären? Ich habe Ihren Link überprüft und diesen gefunden 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.. AWS berechnet anscheinend Gebühren für Lese- und Schreibvorgänge.
Valter Silva
2
@ValterHenrique Der von Ihnen angegebene Text gilt nur für Volumes mit bereitgestelltem IOPS. Sie haben jedoch die Wahl zwischen verschiedenen Volume-Typen. Wenn Sie ein "normales" Volume ohne bereitgestelltes IOPS verwenden (wie den allgemeinen SSD-Volume-Typ "gp2"), werden Lese- und Schreibvorgänge nicht extra berechnet. Vielleicht ein besserer Link zum Vergleichen: aws.amazon.com/ebs/details
Bobsoap
8

Sie können Swap Space mit den folgenden Schritten erstellen. Hier erstellen wir Swap Space unter /home/

  1. dd if=/dev/zero of=/home/swapfile1 bs=1024 count=8388608
    Hier ist count die Kilobyte-Anzahl des Swap-Space

  2. mkswap /home/swapfile1

  3. vi /etc/fstab
    Eintrag machen:
    /home/swapfile1 swap swap defaults 0 0

  4. Lauf:
    swapon -a

minhas23
quelle
4

Wir können Swap Space auf jedem Server hinzufügen

Erstellen Sie eine Datei mit dem Befehl dd

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

bs ist die Blockgröße und count bezieht sich auf die Größe in MB oder GB

wir können umgekehrt verwenden

Ändern Sie nach der Erstellung die Berechtigung der Datei:

 #chmod 600 /swapfile 

Dann tauscht die Datei aus:

 #mkswap /swapfile 

Aktivieren Sie dann die Auslagerungsdatei mit dem Befehl swapon:

 #swapon  /swapfile 

Überprüfen Sie mit dem Befehl free, ob der Swap aktiviert ist oder nicht:

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

Die Verwendung von Davids Instance Storage-Antwort funktionierte anfangs für mich (auf einem m5d.2xlarge). Nachdem ich die EC2-Instanz gestoppt und wieder eingeschaltet hatte, konnte ich mich nicht erneut in die Instanz einschalten.

In den Instanzprotokollen wurde Folgendes gemeldet: "Sie befinden sich im Notfallmodus. Geben Sie nach dem Anmelden" journalctl -xb "ein, um Systemprotokolle anzuzeigen," systemctl reboot "zum Neustart," systemctl default "oder" exit ", um in den Standardmodus zu starten. Drücken Sie die Eingabetaste für die Wartung"

Ich habe stattdessen die AWS-Anweisungen in diesem Link befolgt und alles hat perfekt funktioniert, auch nach dem Aus- und Wiedereinschalten der Instanz.

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
quelle
1

Versuchen Sie es mit swapspace http://pqxx.org/development/swapspace/

Die meisten Distributionen haben es verpackt.

Auf EC2 möchten Sie möglicherweise "swappath" in / mnt oder High-Iops-Festplatte ändern.

rdoroshenko
quelle
1
Aus den Dokumenten: "In seiner aktuellen Form ist Swapspace wahrscheinlich keine gute Wahl für Systeme, die jederzeit reagieren müssen."
Dave Albert
-3

Mit dem folgenden Skript können Sie Swap unter Amazon Linux hinzufügen.

https://github.com/chetankapoor/swap

Laden Sie das Skript mit wget herunter:

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

Führen Sie dann das Skript im folgenden Format aus:

sh swap.sh 2G

Ein vollständiges Tutorial finden Sie unter:

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

Chetan kapoor
quelle
Ich sehe nicht, wozu diese Antwort beiträgt, abgesehen davon, dass es sich nur um ein Shellscript handelt, das im Grunde das tut, was die akzeptierte Antwort bereits erklärt hat.
Nils Werner
Ich habe gerade ein Shell-Skript erstellt, das Zeit spart. Es gibt also zwei Schritte, um einen Swap zu erstellen, anstatt 5 Befehle auszuführen. Wenn Swap bereits vorhanden ist, wird angezeigt, dass Swap bereits vorhanden ist.
Chetan Kapoor
3
Genau. Ein Shellscript, das ich als root ausführen soll. Von jemandem irgendwo gemacht, der sich ohne Vorankündigung ändern oder verschwinden könnte. Alles, um 4-5 Befehlszeilen zu speichern, die vor 5 Jahren veröffentlicht und akzeptiert wurden.
Nils Werner