Comment ajouter un swap à une instance EC2?


293

J'exécute actuellement une micro instance ec2 et j'ai constaté que l'instance manque parfois de mémoire.

Outre l'utilisation d'une taille d'instance plus grande, que peut-on faire d'autre?

Réponses:


574

Une solution à ce problème consiste à ajouter swap(c'est-à-dire paging) de l'espace à l'instance.

La pagination fonctionne en créant une zone sur votre disque dur et en l'utilisant pour de la mémoire supplémentaire, cette mémoire est beaucoup plus lente que la mémoire normale, mais beaucoup plus est disponible.

Pour ajouter cet espace supplémentaire à votre instance, vous tapez:

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

Si vous avez besoin de plus de 1024, remplacez-le par quelque chose de plus élevé.

Pour l'activer par défaut après le redémarrage, ajoutez cette ligne à / etc / fstab:

/var/swap.1   swap    swap    defaults        0   0

Pourriez-vous s'il vous plaît expliquer ce que cela signifie "if = ...", "of = ...", bs = 1M et count = 1024 parce que je n'ai jamais vu if, of and = dans la liste des arguments.
ア レ ッ ク ス

31
ifsignifie «fichier d'entrée», ofsignifie «fichier de sortie», bssignifie «taille de bloc» et countest le nombre de blocs que vous souhaitez allouer… vous pouvez lire la manpage de la commande pour plus d'informations: linux.die.net/man/1/ dd
Fábio Batista

4
Cette ligne de commande dd signifie "copier de / dev / zero vers /var/swap.1. Faites-le en lisant 1024 blocs de taille 1 mégaoctet". C'est un moyen rapide de créer un fichier de 1 Go plein de zéros.
Nelson

3
assez vieux, mais ma mémoire de swap reste 0% utilisée même après redémarrage, une aide?
Girdhari Agrawal

3
Si vous voulez vérifier si le swap est actif:$> free -m
herve

216

L'échange doit avoir lieu sur le disque de stockage d'instance (éphémère) et non sur un périphérique EBS. L'échange entraînera beaucoup d'E / S et augmentera les coûts sur EBS. EBS est également plus lent que le magasin d'instances et le magasin d'instances est gratuit avec certains types d'instances EC2 .

Il sera généralement monté sur / mnt mais s'il n'est pas exécuté

sudo mount /dev/xvda2 /mnt

Pour créer ensuite un fichier d'échange sur cet appareil, procédez comme suit pour un fichier d'échange de 4 Go

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

Assurez-vous qu'aucun autre utilisateur ne peut voir le fichier d'échange

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

Faire et marquer comme swap

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

Ajouter / Assurez-vous que les éléments suivants sont dans votre / etc / fstab

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

enfin activer l'échange

sudo swapon -a

6
c'est certainement la réponse la plus complète imo
Jon B

4
Pour monter un système de fichiers, il faut spécifier le type de système de fichiers. Pour trouver le système de fichiers, la commande est: $ df -T Ceci vous montrera les périphériques et leurs systèmes de fichiers. Surtout ext4. Pour moi, c'était / dev / xvda1, pas 2.
user1452686

8
Selon docs.aws.amazon.com/AWSEC2/latest/UserGuide/…, il n'est plus possible d'ajouter des magasins d'instance aux instances t1 / t2. Après avoir essayé malgré tout, cela semble être correct.
muttonUp

3
@alfetopito Vous pouvez probablement créer un fichier d'échange littéral sur une partition existante au lieu d'ajouter une autre partition comme échange. Un bon guide pour Centos 6 - digitalocean.com/community/tutorials/…
muttonUp

1
Selon Amazon, il n'est pas garanti que vous conserviez le stockage de votre instance après le redémarrage, le fstab n'échouera-t-il pas alors?
double

42

Après avoir appliqué les étapes mentionnées par ajtrichards, vous pouvez vérifier si votre instance de niveau gratuit amazon utilise swap à l'aide de cette commande

cat /proc/meminfo

résultat:

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

40

Vous pouvez ajouter un swap de 1 Go à votre instance avec ces commandes:

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

Pour l'activer par défaut après le redémarrage, ajoutez cette ligne à /etc/fstab:

/swapfile swap swap defaults 0 0

Mais à partir de quel système de fichiers il faudra de l'espace pour créer Swap?
Hussain

@Hussain Il créera le swap dans le système de fichiers racine puisque le chemin est /swapfile. Mais vous pouvez également monter un autre système de fichiers et y créer le fichier d'échange, par exemple /mnt/blah/swapfile.
David Levesque

Peut confirmer que cela fonctionne sur une instance t2.micro. J'ai fait le mien @ / mnt / swap car j'aime une racine propre.
Mike Purcell

1
A voté cette réponse parce qu'elle est la plus courte et fait le travail. Cependant, la commande swapfile chmod 600 doit être ajoutée.
Sõber

15

Si vous êtes sur des t2cas ( t2.micro, t2.medium, t2.small), il n'y a pas de stockage d'éphémère ou de l' instance à votre disposition . Il vous suffit donc de créer votre swap, EBSce qui, selon votre cas d'utilisation, peut ou peut ne pas être une bonne idée. Sinon, suivez la réponse de @David et créez votre swap sur le stockage éphémère pour éviter de payer les coûts EBS.

Plus d'informations: http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/InstanceStorage.html il y a un tableau qui montre la quantité de stockage éphémère que vous obtenez pour chaque type d'instance.


1
Peut confirmer que c'est généralement une mauvaise idée. Si vous avez un processus qui devient voyou (j'ai eu un serveur de noeuds et une configuration python / céleri), vous encourrez une tonne de frais lorsqu'il lit et écrit sur votre bloc EBS toute la semaine sans que vous le sachiez: -)
ZachM

3
Selon aws.amazon.com/ebs/pricing , les E / S sont incluses dans tous les volumes EBS à l'exception du SSD IPOS provisionné (io1). Vous seulement par Go. Cela aurait pu être un changement récent dans le modèle de tarification - mais cela signifie que même si EBS est beaucoup plus lent que le véritable Instance Storace, il n'y a pas de frais supplémentaires pour les lectures et les écritures.
bobsoap

@bobsoap Pourriez-vous clarifier cela? J'ai vérifié votre lien et l'ai trouvé 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.. Ce qui semble qu'AWS facturera les opérations de lecture et d'écriture.
Valter Silva

2
@ValterHenrique Le texte que vous avez cité s'applique uniquement aux volumes avec des IOPS provisionnés, mais vous avez le choix entre plusieurs types de volume différents. Si vous utilisez un volume "normal" sans IOPS provisionné (comme le type de volume SSD à usage général appelé "gp2"), les opérations de lecture et d'écriture ne sont pas facturées en supplément. Peut-être un meilleur lien pour comparer: aws.amazon.com/ebs/details
bobsoap

8

Vous pouvez créer un espace d'échange en procédant comme suit /home/

  1. dd if=/dev/zero of=/home/swapfile1 bs=1024 count=8388608
    Ici, le nombre correspond au nombre de kilo-octets d'espace de swap

  2. mkswap /home/swapfile1

  3. vi /etc/fstab
    faire entrée:
    /home/swapfile1 swap swap defaults 0 0

  4. courir:
    swapon -a


4

Nous pouvons ajouter de l'espace de swap dans n'importe quel serveur

créer un fichier à l'aide de la commande dd

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

bs est une taille de bloc et le nombre fait référence à la taille en Mo ou Go

nous pouvons utiliser l'inverse

Après la création, modifiez l'autorisation du fichier:

 #chmod 600 /swapfile 

Fait ensuite permuter le fichier:

 #mkswap /swapfile 

Activez ensuite le fichier d'échange avec la commande swapon:

 #swapon  /swapfile 

Vérifiez avec la commande gratuite si le swap est activé ou non:

 #free -h
 #swapon -s

3

L'utilisation de la réponse de stockage d'instance de David a initialement fonctionné pour moi (sur un m5d.2xlarge), cependant, après avoir arrêté l'instance EC2 et l'avoir réactivée, je n'ai pas pu me connecter à nouveau à l'instance.

Les journaux d'instance ont signalé: "Vous êtes en mode d'urgence. Après vous être connecté, tapez" journalctl -xb "pour afficher les journaux système," systemctl reboot "pour redémarrer," systemctl default "ou" exit "pour démarrer en mode par défaut. Appuyez sur Entrée pour la maintenance"

J'ai plutôt suivi les instructions AWS dans ce lien et tout a parfaitement fonctionné, y compris après avoir éteint et rallumé l'instance.

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

1

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

La plupart des distributions l'ont emballé.

Sur EC2, vous souhaiterez peut-être remplacer "swappath" par un disque / mnt ou high-iops.


1
De la documentation: "Dans sa forme actuelle, Swapspace n'est probablement pas un bon choix pour les systèmes qui doivent rester réactifs à tout moment;"
Dave Albert

-3

Vous pouvez utiliser le script suivant pour ajouter un échange sur Amazon Linux.

https://github.com/chetankapoor/swap

Téléchargez le script à l'aide de wget:

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

Exécutez ensuite le script au format suivant:

sh swap.sh 2G

Pour un tutoriel complet, vous pouvez visiter:

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


Je ne vois pas en quoi cette réponse contribue, en plus d'être un simple script qui fait essentiellement ce que la réponse acceptée a déjà expliqué.
Nils Werner

Je viens de créer un script shell, cela fait gagner du temps, donc il y aura 2 étapes pour créer un échange au lieu d'exécuter 5 commandes et si l'échange existe déjà, il vous montrera que l'échange est déjà là.
Chetan kapoor

3
Exactement. Un shellscript que je suis censé exécuter en tant que root. Fabriqué par quelqu'un, quelque part, qui pourrait changer ou disparaître sans préavis. Tout pour enregistrer 4 à 5 lignes de commande qui ont été publiées et acceptées il y a 5 ans.
Nils Werner
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.