J'ai démarré quelques serveurs sur EC2 et ils n'ont pas d'échange.
Suis-je en train de faire quelque chose de mal ou est-ce que les machines n'en ont tout simplement pas?
Vous avez raison, les images Ubuntu EC2 EBS ne sont pas fournies avec un espace de swap configuré (pour 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 de swap, votre serveur pourrait s'arrêter pendant un bon moment avant que le tueur OOM ne se déclenche, tandis qu'avec swap, il devient simplement lent. Pour cette raison, j'aime toujours avoir de l'espace d'échange, même avec suffisamment 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. J'ai déjà fait cela auparavant et cela fonctionne bien, mais il est probablement un peu plus lent que le stockage d'instance car il passe sur le réseau.
Ou vous pourriez être en mesure de 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 pu 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), uniquement à la partition (xvda1).
Ou vous pouvez créer un fichier d'échange. C'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 hésitent à utiliser des fichiers au lieu de partitions, mais cela fonctionne certainement assez bien comme espace d'échange d'urgence.
Le meilleur emplacement pour échanger à mon humble avis est le magasin d'instances. Pourquoi? AWS ne vous facture pas pour les E/S sur le magasin d'instances. En outre, l'instance-store est plus performante que EBS dans de nombreux cas. Assurez-vous simplement d'avoir un script qui recrée le fichier d'échange au cas où vous arrêteriez l'instance. Les redémarrages sont corrects. Pourquoi oh pourquoi il n'est pas là par défaut?
Localisons le magasin d'instances.
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
Vive, 160,1 Go gratuitement! Mettez votre échange là-dedans et oubliez 100 $ de dépassements par serveur lorsque votre échange basé sur EBS est essaimé par erreur. Expérience malheureuse de parler ici.
Apparemment, dans certains cas, vous ne voyez pas le magasin d'instances.
Selon le type d'instance, vous devez d'abord attacher les volumes de stockage d'instance à l'instance à l'aide des options de mappage de périphérique de bloc. Si vous ne le faites pas, vous ne verrez peut-être même pas les périphériques sous/dev (selon Comment utiliser le stockage "Instance Store Volumes" dans Amazon EC2? )
Remarque: Amazon a changé son politique de prix , et ne le fait pas facturer les demandes d'E/S à la mi-2016. La réponse est conservée ici pour des raisons historiques, mais l'utilisation (ou la non-utilisation) du swap sur les instances soutenues par EC2 EBS n'a aucune incidence sur les coûts.
C'est par conception. Le swap est désactivé par défaut sur les instances soutenues par EC2 EBS, pour é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 une quantité assez importante de demandes d'E/S sur votre volume EBS. Amazon facture 0,10 $ pour 1 million de demandes d'E/S (voir http://aws.Amazon.com/pricing/ebs/ ).
Dans des conditions normales, vous ne devriez pas vous en soucier; généralement le coût des demandes d'E/S même sur de plus petites instances quelques dollars, si c'est le cas. Donc, si vous savez que vous avez une instance correctement dimensionnée et que l'échange n'est utilisé que rarement, allez-y et activez-le. Mais soyez prudent avec de minuscules instances.
Si vous activez l'échange, vous souhaiterez peut-être garder un œil sur les rapports d'utilisation. En option, vous pouvez également configurer une alerte de facturation en accédant à Panneau de configuration CloudWatch et en créant une nouvelle alarme pour le montant total facturé. De cette façon, vous serez averti immédiatement, c'est quelque chose de bizarre qui se passe avec vos instances.
Vérifier la /etc/fstab
, ils ont probablement été configurés sans permuter l'image que vous utilisez. Je pense que certaines personnes s'exécutent sans swap pour les serveurs car elles s'attendent à ne jamais utiliser plus que la mémoire totale - le swap rend tout super lent.
Cependant, je suis toujours paranoïaque à propos de certains processus qui montent en mémoire, donc je pense qu'il serait prudent de votre part de simplement configurer un lecteur de swap et de recréer une image à partir de l'instance ec2 en cours d'exécution.