Réservation de mémoire pour une instance de conteneur Amazon ECS Linux - Amazon Elastic Container Service

Réservation de mémoire pour une instance de conteneur Amazon ECS Linux

Lorsque l’agent de conteneur Amazon ECS enregistre une instance de conteneur dans un cluster, il doit déterminer la quantité de mémoire disponible que l’instance de conteneur peut réserver pour vos tâches. En raison de la surcharge de mémoire de la plateforme et de la mémoire utilisée par le noyau du système, ce nombre est différent de la quantité de mémoire installée qui est annoncée pour les instances Amazon EC2. Par exemple, une instance m4.large a 8 Gio de mémoire installée. Toutefois, cela n’équivaut pas toujours exactement à 8 192 Mio de mémoire disponible pour les tâches lorsque l’instance de conteneur s’enregistre.

L’agent de conteneur Amazon ECS fournit une variable de configuration appelée ECS_RESERVED_MEMORY, que vous pouvez utiliser pour supprimer un nombre spécifié de Mio de mémoire du groupe qui est alloué à vos tâches. Cela réserve de manière effective cette quantité de mémoire pour les processus système critiques.

Si vous occupez la totalité de la mémoire sur une instance de conteneur avec vos tâches, il est alors possible que vos tâches se disputent la mémoire avec les processus système critiques, ce qui peut provoquer une défaillance du système.

Par exemple, si vous spécifiez ECS_RESERVED_MEMORY=256 dans votre fichier de configuration de l'agent de conteneur, l'agent enregistre la mémoire totale, moins 256 Mio pour cette instance. 256 Mio de mémoire ne sont donc pas allouées par des tâches ECS. Pour plus d'informations sur les variables de configuration de l'agent et la façon de les définir, consultez Configuration de l'agent de conteneur Amazon ECS et Démarrage des instances de conteneurs Amazon ECS Linux pour transmettre des données.

Si vous spécifiez 8 192 Mio pour la tâche et qu’aucune de vos instances de conteneur ne dispose d’au moins 8 192 Mio de mémoire disponible pour répondre à cette exigence, la tâche ne peut pas être placée dans votre cluster. Si vous utilisez un environnement de calcul géré, AWS Batch doit lancer un type d'instance plus important pour répondre à la demande.

Vous devez également réserver une partie de la mémoire pour l'agent de conteneur Amazon ECS et d'autres processus système critiques sur vos instances de conteneur, afin que les conteneurs de votre tâche ne se disputent pas la même mémoire, ce qui pourrait provoque une défaillance du système.

L'agent de conteneur Amazon ECS utilise la fonction ReadMemInfo() Docker pour connaître la mémoire totale disponible pour le système d'exploitation. Linux et Windows fournissent tous deux des utilitaires de ligne de commande pour déterminer la mémoire totale.

Exemple - Déterminer la mémoire totale Linux

La commande free renvoie la mémoire totale reconnue par le système d'exploitation.

$ free -b

Exemple de sortie d'une instance m4.large exécutant l'AMI Amazon Linux optimisée pour Amazon ECS.

total used free shared buffers cached Mem: 8373026816 348180480 8024846336 90112 25534464 205418496 -/+ buffers/cache: 117227520 8255799296

Cette instance comporte 8373026816 octets de mémoire totale, soit 7 985 Mio disponible pour les tâches.

Exemple - Déterminer la mémoire totale Windows

La commande wmic renvoie la mémoire totale reconnue par le système d'exploitation.

C:\> wmic ComputerSystem get TotalPhysicalMemory

Exemple de sortie d’une instance m4.large exécutant l’AMI Windows Server optimisée pour Amazon ECS.

TotalPhysicalMemory 8589524992

Cette instance comporte 8589524992 octets de mémoire totale, soit 8 191 Mio disponible pour les tâches.

Affichage de la mémoire d’une instance de conteneur

Vous pouvez consulter la quantité de mémoire avec laquelle est enregistrée une instance de conteneur dans la console Amazon ECS (ou avec l’opération d’API DescribeContainerInstances). Si vous essayez d’optimiser l’utilisation de vos ressources en fournissant à vos tâches autant de mémoire que possible pour un type d’instance particulier, vous pouvez observer la mémoire disponible pour cette instance de conteneur, puis attribuer autant de mémoire à vos tâches.

Pour afficher la mémoire d’une instance de conteneur
  1. Ouvrez la console à partir de l'adresse https://console.aws.amazon.com/ecs/v2.

  2. Dans le panneau de navigation, choisissez Clusters, puis sélectionnez le cluster qui héberge votre instance de conteneur.

  3. Choisissez Infrastructure, puis sous les instances de conteneur, choisissez une instance de conteneur.

  4. La section Ressources indique la mémoire enregistrée et la mémoire disponible pour l’instance de conteneur.

    La valeur de mémoire Enregistrée correspond à l’instance de conteneur enregistrée auprès d’Amazon ECS lors de son premier lancement, tandis que la valeur de mémoire Disponible correspond à la mémoire qui n’a pas encore été allouée à des tâches.