Pourquoi les images EC2 ubuntu ne sont-elles pas échangées?

82

J'ai démarré quelques serveurs sur EC2 et ils n'ont pas d'échange.

Est-ce que je fais quelque chose de mal ou est-ce que les machines n'en ont tout simplement pas?

Rafamvc
la source
Je me demandais cela aussi, mais je venais de configurer une instance EBS, de la formater en swap et de swapon / dev / sdg ...
Tom O'Connor Le
C'est également typique, le cas de l'utilisation de lecteurs SSD sur un système Linux pour ne pas configurer l'échange sur le lecteur SSD. Principalement parce que certaines personnes sont paranoïaques, cela aurait un impact négatif sur la durée de stockage d'un disque SSD en forant le même ensemble de secteurs tout le temps.
djangofan
1
Quelle AMI et quelle taille d'instance EC2. L'AMI doit être configurée pour utiliser une partition de swap et l'instance doit l'avoir ajoutée lors du démarrage.
Jeremy Bouse
Dans la mesure du possible, je vous conseillerais de ne pas utiliser le swap sur EC2 à moins que vous ne soyez certain à 99% de ne pas l’utiliser (c’est-à-dire qu’il n’est là que pour les urgences). Lorsque nous avons désactivé le swap sur certaines de nos instances EC2, nos coûts mensuels d’ES EBS IO ont probablement été divisés par deux. Juste mes deux cents pour vous faire économiser deux cents - oui c'était terrible, je m'excuse et je vais me cacher dans un coin;)
Smudge
Vous pouvez également regarder dans cette procédure docs.aws.amazon.com/AWSEC2/latest/UserGuide/…
Artem.Borysov

Réponses:

74

Vous avez raison, les images EBS Ubuntu EC2 ne sont pas fournies avec un espace d'échange configuré (pour la version 11.04 au moins). Les images de type instance "normales" ont une partition de swap, bien que seulement 896 Mo sur celle que j'ai testée.

Si un processus explose et que vous n'avez pas d'espace d'échange, votre serveur risque de s'arrêter lentement avant que le tueur de MOO n'intervienne, alors qu'avec l'échange, il devient simplement lent. Pour cette raison, j'aime toujours avoir un espace d'échange, même avec assez de RAM. Voici vos options:

  • Créez un volume EBS (2 à 4 fois la taille de votre RAM), attachez-le à votre instance (j'aime l'appeler / dev / xvdm pour "mémoire") sudo mkswap /dev/xvdm, ajoutez-le à fstab sudo swapon -a, et vous êtes prêt à partir. . Je l'ai déjà fait auparavant et cela fonctionne bien, mais c'est probablement un peu plus lent que le magasin d'instances, car il passe par le réseau.

  • Vous pouvez également repartitionner votre disque pour ajouter une partition de swap, bien que cela puisse nécessiter la création d'une nouvelle AMI. Je n'ai pas été capable de le faire dans une instance en cours d'exécution, car je ne peux pas démonter le système de fichiers racine et je n'ai même pas accès au périphérique de disque (/ dev / xvda), mais uniquement à la partition (xvda1).

  • Ou vous pouvez créer un fichier d'échange. Ceci est ma solution préférée en ce moment.

    sudo dd if=/dev/zero of=/var/swapfile bs=1M count=2048 &&
    sudo chmod 600 /var/swapfile &&
    sudo mkswap /var/swapfile &&
    echo /var/swapfile none swap defaults 0 0 | sudo tee -a /etc/fstab &&
    sudo swapon -a
    

    Terminé. :) Je sais que beaucoup de gens craignent d'utiliser des fichiers plutôt que des partitions, mais cela fonctionne certainement assez bien comme espace d'échange d'urgence.

Jo Liss
la source
4
Passer à un volume EBS peut entraîner des coûts supplémentaires, comme indiqué dans les autres réponses. Ne pas utiliser swap, ou échanger sur un magasin d'instances semblent être de meilleures solutions.
Isuldor
7
L'utilisation du magasin d'instances est une meilleure option que EBS. EBS étant un système de fichiers réseau, connectez-vous à l'instance EC2 via la même connexion réseau que tout le reste. Le magasin d'instances est connecté au matériel hébergeant l'instance (c'est pourquoi il ne persiste pas lorsque vous arrêtez et démarrez votre instance). Le seul moment où EBS est une option de swap est lorsque vous utilisez un type d'instance qui ne vient pas avec le stockage d'instance, c'est-à-dire que le t1.micro (qui ne dispose que d'environ 620 Mo de RAM est probablement celui qui a vraiment besoin de secours échanger).
ColtonCat
Le bs = 1M est déjà en notation binaire, le multiplicateur compte = 2048 doit donc compter = 2000 - si je ne me trompe pas.
Ypocat
1
Si vous optez pour 2GiB, alors 1024 * 2048 semble correct.
Jo Liss
25

Le meilleur emplacement pour le swap IMHO est le magasin d'instances. Pourquoi? AWS ne vous facture pas les entrées / sorties sur le magasin d'instances. En outre, le magasin d'instance est plus performant que EBS dans de nombreux cas. Assurez-vous simplement que vous avez un script qui recrée le fichier d'échange au cas où vous arrêteriez l'instance. Les redémarrages sont bien. Pourquoi oh pourquoi ce n'est pas là par défaut?

Localisons le magasin d'instance.

root@domU-**-**-**-**-**-**:/var/log# fdisk -l

[...]

Disk /dev/xvda2: 160.1 GB, 160104972288 bytes
255 heads, 63 sectors/track, 19464 cylinders, total 312705024 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Disk /dev/xvda2 doesn't contain a valid partition table

Hourra, 160.1GB gratuitement! Mettez votre échange là-bas et oubliez 100 $ de dépassement par serveur lorsque votre échange basé sur EBS est envahi par erreur. Expérience malheureuse parler ici.

Apparemment, dans certains cas, vous ne voyez pas le magasin d'instances.

En fonction du type d'instance, vous devez d'abord associer les volumes de stockage d'instance à l'instance à l'aide des options de mappage de périphérique / bloc. Si vous ne le faites pas, vous risquez même de ne pas voir les périphériques sous / dev (voir Comment utiliser le stockage "Volumes de stockage d'instance" dans Amazon EC2? )

sebwinadmin
la source
1
je veux juste souligner que les utilisateurs de t1.micro sur le niveau libre ne peuvent pas utiliser cette option.
Reuben L.
20

Remarque : Amazon a modifié sa politique de tarification et ne facture pas les demandes d'E / S à partir de la mi-2016. La réponse est conservée ici pour des raisons historiques, mais l'utilisation de swap (ou non) sur les instances basées sur EC2 EBS n'a aucune incidence financière.


C'est par conception. L'échange est désactivé par défaut sur les instances EC2 basées sur EBS, afin d'éviter des coûts imprévisibles.

Si vous avez une application gourmande en mémoire qui devient malveillante (par exemple, sur une petite ou une petite instance), elle peut générer un assez grand nombre de demandes d'E / S sur votre volume EBS. Amazon facture 0,10 USD par million de demandes d'E / S (voir http://aws.amazon.com/pricing/ebs/ ) .

Dans des conditions normales, vous ne devriez pas vous en préoccuper. généralement, le coût des demandes d’E / S, même sur des instances plus petites, de quelques dollars, le cas échéant. Donc, si vous savez que vous avez une instance correctement dimensionnée et que l’échange ne sera utilisé que très rarement, continuez et activez-le. Mais soyez prudent avec de petites instances.

Si vous activez l'échange, vous voudrez peut-être garder un œil sur les rapports d'utilisation. Si vous le souhaitez, vous pouvez également configurer une alerte de facturation en accédant au panneau de configuration CloudWatch et en créant une nouvelle alarme pour le montant total facturé. De cette façon, vous serez immédiatement informé que quelque chose de bizarre se passe avec vos instances.

Gui Ambros
la source
Cette réponse est un peu trompeuse ou déroutante pour moi car les types d'instances les plus courants utilisent des volumes SSD. aws.amazon.com/ec2/instance-types
Taylor Edmiston
2
@tedmiston: en effet, cette réponse n'est plus applicable. Je me suis ajusté pour refléter la nouvelle réalité, mais les demandes d'E / S sont gratuites, de sorte que l'activation de l'échange (ou non) peut désormais être effectuée sur une base purement technique.
Gui Ambros
1

Vérifiez le /etc/fstabfichier, ils ont probablement été mis en place sans échange dans l'image que vous utilisez. Je pense que certaines personnes courent sans échange de serveurs car elles s'attendent à ne jamais utiliser plus que la totalité de la mémoire. L'échange rend tout extrêmement lent.

Cependant, je suis toujours paranoïaque à propos de certains processus gonflant en mémoire, donc je pense qu'il serait prudent de vous simplement de configurer un lecteur d'échange et de recréer une image à partir de l'instance ec2 en cours d'exécution.

ehsanul
la source
2
Un échange occasionnel ne ralentit pas le système.
Laebshade
0

Une solution simple à l' exécution swapen EC2images est d'exécuter swapcompressé avec lz4en ramavec zram-init.

Cette solution ne pas prendre ramloin de la host:

entrez la description de l'image ici

Stuart Cardall
la source
1
Très créatif, mais utiliser votre RAM en tant que RAM réelle n'aurait-il pas plus de sens que de l'utiliser en tant que système de fichiers en mémoire pour un échange? (qui s'habitue principalement lorsque vous manquez de mémoire) Réduire la quantité de mémoire disponible pour les applications afin de créer un échange semble contre-intuitif ...
HBruijn
Réponse intéressante, mais je pense qu'utiliser EBS / instance store est probablement une meilleure solution polyvalente. J'ai un t2.nano avec 512 Mo de RAM et 512 Mo swap sur EBS qui fonctionne très bien.
Tim
Cela prend clairement la RAM de l'hôte (instance EC2) - d'où vient la RAM? Le seul avantage de cette approche est de compresser une partie de votre RAM totale, mais cela ne permet pas d’utiliser le SSD en tant que swap. Vous pouvez utiliser à la place zswapun cache RAM compressé au-dessus d'un fichier / disque d'échange normal: wiki.archlinux.org/index.php/zswap . Voir cnx-software.com/2018/05/14/… pour plus d'informations sur zram.
RichVel