Allocazione della memoria di un'istanza di container Amazon ECS Linux - Amazon Elastic Container Service

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Allocazione della memoria di un'istanza di container Amazon ECS Linux

Quando l'agente container Amazon ECS registra un'istanza di container in un cluster, l'agente deve determinare quanta memoria è disponibile nell'istanza di container per essere allocata alle tue attività. A causa del sovraccarico di memoria della piattaforma e della memoria occupata dal kernel di sistema, questo numero è diverso dalla quantità di memoria installata pubblicizzata per le istanze Amazon. EC2 Ad esempio, un'istanza m4.large dispone di 8 GiB di memoria installata. Tuttavia, ciò non si traduce sempre in esattamente 8192 MiB di memoria disponibile per le attività quando l'istanza di container viene registrata.

Determinazione delle risorse di memoria di ECS Managed Instances

Amazon ECS Managed Instances utilizza un approccio gerarchico per determinare i requisiti di risorse di memoria per le attività. A differenza di ECS, EC2 che si basa sull'introspezione della memoria di Docker, ECS Managed Instances calcola i requisiti di memoria direttamente dal payload dell'attività durante le decisioni di pianificazione.

Quando l'agente ECS Managed Instances riceve un'attività, calcola il fabbisogno di memoria utilizzando il seguente ordine di priorità:

  1. Memoria a livello di attività (priorità massima): se la memoria a livello di attività è specificata nella definizione dell'attività, l'agente utilizza direttamente questo valore. Ciò ha la precedenza su tutte le impostazioni di memoria a livello di contenitore.

  2. Somma di memoria a livello di contenitore (fallback): se la memoria a livello di attività non è specificata (o è 0), l'agente somma i requisiti di memoria di tutti i contenitori dell'operazione. Per ogni contenitore, utilizza:

    1. Prenotazione di memoria (soft limit): se un contenitore lo specifica memoryReservation nella sua configurazione, l'agente utilizza questo valore.

    2. Memoria del contenitore (limite rigido): se non memoryReservation è specificato, l'agente utilizza il memory campo del contenitore.

Esempio Memoria a livello di attività specificata

Quando viene specificata la memoria a livello di attività, ha la precedenza sulle impostazioni a livello di contenitore:

{ "family": "my-task", "memory": "2048", "containerDefinitions": [ { "name": "container1", "memory": 1024, "memoryReservation": 512 } ] }

L'agente riserva 2048 MiB (la memoria a livello di attività ha la precedenza).

Esempio Memoria a livello di contenitore con prenotazioni

Quando non viene specificata la memoria a livello di attività, l'agente somma i requisiti di memoria del contenitore:

{ "family": "my-task", "containerDefinitions": [ { "name": "container1", "memory": 1024, "memoryReservation": 512 }, { "name": "container2", "memory": 512 } ] }

L'agente riserva 512 MiB (prenotazione container1) + 512 MiB (memoria container2) = 1024 MiB totali.

L'agente ECS Managed Instances esegue il calcolo della memoria in tre fasi:

  1. Ricezione delle attività: quando il payload di un'operazione arriva dal piano di controllo ECS, l'agente calcola immediatamente la memoria richiesta.

  2. Archiviazione delle risorse: il fabbisogno di memoria calcolato viene memorizzato nel modello di attività per un uso successivo nelle operazioni di contabilità delle risorse.

  3. Decisione sulla pianificazione: prima di accettare un'attività, l'agente verifica se è disponibile memoria sufficiente. Se la memoria disponibile è insufficiente, l'attività viene rifiutata e rimane nella coda dei servizi ECS fino a quando le risorse non diventano disponibili.

Nota

A differenza di ECS on EC2, ECS Managed Instances non utilizza la variabile di configurazione. ECS_RESERVED_MEMORY La prenotazione della memoria per i processi di sistema viene gestita tramite la gestione delle risorse della piattaforma sottostante e l'agente esegue una contabilità accurata delle risorse in base alle definizioni delle attività.

Per ECS attivo EC2, l'agente container Amazon ECS fornisce una variabile di configurazione chiamataECS_RESERVED_MEMORY, che puoi usare per rimuovere un numero specifico di MiB di memoria dal pool allocato alle tue attività. In questo modo si riserva la memoria per i processi di sistema critici.

Se occupi tutta la memoria di un'istanza di container con le tue attività, è possibile che queste ultime entrino in conflitto con le attività di sistema critiche per la memoria e causino un errore di sistema.

Ad esempio, se si specifica ECS_RESERVED_MEMORY=256 nel file di configurazione dell'agente del container, l'agente registra la memoria totale -256 MiB per quell'istanza e 256 MiB di memoria non possono essere allocati da task ECS. Per ulteriori informazioni sulle variabili dell'agente e su come impostarle, vedere Configurazione dell'agente del container Amazon ECS e Bootstrap di istanze di container Linux Amazon ECS per il trasferimento dei dati.

Se specifichi 8192 MiB per l'attività e nessuna delle istanze di container dispone di 8192 MiB o più di memoria disponibile per soddisfare questo requisito, l'attività non può essere inserita nel cluster. Se utilizzi un ambiente di elaborazione gestito, AWS Batch devi avviare un tipo di istanza più grande per soddisfare la richiesta.

L'agente del container di Amazon ECS utilizza la funzione Docker ReadMemInfo() per eseguire una query sulla memoria totale disponibile per il sistema operativo. Sia Linux che Windows forniscono utilità a riga di comando per determinare la memoria totale.

Esempio - Determinare la memoria totale in Linux

Il comando free restituisce la memoria totale riconosciuta dal sistema operativo.

$ free -b

Esempio di output per un'istanza m4.large che esegue l'AMI Amazon Linux ottimizzata per Amazon ECS.

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

Questa istanza ha 8373026816 byte di memoria totale, che si traducono in 7985 MiB disponibili per le attività.

Esempio - Determinare la memoria totale in Windows

Il comando wmic restituisce la memoria totale riconosciuta dal sistema operativo.

C:\> wmic ComputerSystem get TotalPhysicalMemory

Esempio di output per un'istanza m4.large che esegue il server AMI Amazon Windows ottimizzato per Amazon ECS.

TotalPhysicalMemory 8589524992

Questa istanza ha 8589524992 byte di memoria totale, che si traducono in 8191 MiB disponibili per le attività.

Visualizzare la memoria di un'istanza di container

Puoi visualizzare la quantità di memoria con cui registra un'istanza del contenitore nella console Amazon ECS (o con l'operazione DescribeContainerInstancesAPI). Se stai cercando di massimizzare l'utilizzo delle risorse fornendo alle tue attività la maggior quantità possibile di memoria per un particolare tipo di istanza, puoi osservare la memoria disponibile per quell'istanza di container e quindi assegnare alle tue attività tale quantità di memoria.

Per visualizzare la memoria dell'istanza di container
  1. Apri la console nella versione 2. https://console.aws.amazon.com/ecs/

  2. Nel riquadro di navigazione, scegli Cluster e seleziona il cluster che ospita l'istanza di container.

  3. Scegli Infrastruttura, quindi in Istanze di container scegli un'istanza di container.

  4. La sezione Risorse mostra la memoria registrata e disponibile per l'istanza di container.

    Il valore di memoria Registrato corrisponde a quello che l'istanza di container ha registrato in Amazon ECS la prima volta che è stata avviata e il valore di memoria Disponibile è quello che non è ancora stato allocato alle attività.