Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Arbeitsspeicher für Linux-Container-Instances von Amazon ECS reservieren
Wenn der Amazon-ECS-Container-Agent eine Container-Instance in einem Cluster registriert, muss der Agent bestimmen, wie viel Arbeitsspeicher die Container-Instance zur Verfügung hat und für Ihre Aufgaben reservieren kann. Aufgrund des Mehraufwands für den Plattformspeicher und des vom Systemkernel belegten Speichers unterscheidet sich diese Zahl von der Menge des installierten Speichers, der für EC2 Amazon-Instances angegeben ist. Eine m4.large-Instance beispielsweise besitzt 8 GiB installierten Speicher. Dies bedeutet jedoch nicht immer, dass genau 8 192 MiB Arbeitsspeicher für Aufgaben zur Verfügung stehen, wenn die Container-Instance registriert wird.
Bestimmung der Speicherressourcen für ECS Managed Instances
Amazon ECS Managed Instances verwendet einen hierarchischen Ansatz, um die Speicherressourcenanforderungen für Aufgaben zu ermitteln. Im Gegensatz zu ECS EC2 , das auf der Speicher-Introspektion von Docker basiert, berechnet ECS Managed Instances den Speicherbedarf bei Planungsentscheidungen direkt anhand der Task-Payload.
Wenn der ECS Managed Instances Agent eine Aufgabe empfängt, berechnet er den Speicherbedarf anhand der folgenden Prioritätsreihenfolge:
-
Speicher auf Taskebene (höchste Priorität) — Wenn in der Aufgabendefinition Speicher auf Taskebene angegeben ist, verwendet der Agent diesen Wert direkt. Dieser Wert hat Vorrang vor allen Speichereinstellungen auf Containerebene.
-
Speichersumme auf Containerebene (Fallback) — Wenn kein Speicher auf Taskebene angegeben ist (oder 0 ist), summiert der Agent die Speicheranforderungen aller Container in der Aufgabe. Für jeden Container verwendet er:
-
Speicherreservierung (Soft-Limit) — Wenn ein Container
memoryReservationin seiner Konfiguration einen Wert angibt, verwendet der Agent diesen Wert. -
Container-Speicher (festes Limit) — Wenn
memoryReservationnicht angegeben, verwendet der Agent dasmemoryFeld des Containers.
-
Beispiel Speicher auf Taskebene angegeben
Wenn Speicher auf Aufgabenebene angegeben ist, hat dieser Vorrang vor Einstellungen auf Containerebene:
{ "family": "my-task", "memory": "2048", "containerDefinitions": [ { "name": "container1", "memory": 1024, "memoryReservation": 512 } ] }
Der Agent reserviert 2048 MiB (Speicher auf Taskebene hat Vorrang).
Beispiel Speicher auf Containerebene mit Reservierungen
Wenn kein Speicher auf Taskebene angegeben ist, summiert der Agent die Speicheranforderungen des Containers:
{ "family": "my-task", "containerDefinitions": [ { "name": "container1", "memory": 1024, "memoryReservation": 512 }, { "name": "container2", "memory": 512 } ] }
Der Agent reserviert 512 MiB (Container1-Reservierung) + 512 MiB (Container2-Speicher) = 1024 MiB insgesamt.
Der ECS Managed Instances Agent führt die Speicherberechnung in drei Phasen durch:
-
Empfang von Aufgaben — Wenn eine Task-Payload von der ECS-Steuerebene eingeht, berechnet der Agent sofort den benötigten Arbeitsspeicher.
-
Ressourcenspeicher — Der berechnete Speicherbedarf wird im Aufgabenmodell gespeichert, sodass er später bei der Ressourcenabrechnung verwendet werden kann.
-
Entscheidung zur Terminplanung — Bevor der Agent eine Aufgabe annimmt, prüft er, ob ausreichend Speicherplatz verfügbar ist. Wenn nicht genügend Speicher verfügbar ist, wird die Aufgabe zurückgewiesen und verbleibt in der ECS-Servicewarteschlange, bis Ressourcen verfügbar sind.
Anmerkung
Im Gegensatz zu ECS on EC2 verwendet ECS Managed Instances die ECS_RESERVED_MEMORY Konfigurationsvariable nicht. Die Speicherreservierung für Systemprozesse erfolgt über das Ressourcenmanagement der zugrunde liegenden Plattform, und der Agent führt eine genaue Ressourcenabrechnung auf der Grundlage von Aufgabendefinitionen durch.
Wenn ECS aktiviert ist EC2, stellt der Amazon ECS-Container-Agent eine Konfigurationsvariable namens bereitECS_RESERVED_MEMORY, mit der Sie eine bestimmte Anzahl von MiB Speicher aus dem Pool entfernen können, der Ihren Aufgaben zugewiesen ist. Damit wird dieser Arbeitsspeicher für wichtige Systemprozesse reserviert.
Wenn Sie den gesamten Arbeitsspeicher auf einer Container-Instance mit Ihren Aufgaben belegen, kann es sein, dass Ihre Aufgabe mit wichtigen Systemprozessen um Arbeitsspeicher konkurrieren und möglicherweise einen Systemfehler auslösen.
Wenn Sie beispielsweise ECS_RESERVED_MEMORY=256 in der Konfigurationsdatei Ihres Container-Agenten angeben, registriert der Agent den gesamten Arbeitsspeicher bis auf 256 MiB für diese Instance, und 256 MiB Arbeitsspeicher können nicht für ECS-Aufgaben zugeordnet werden. Weitere Informationen über die Konfigurationsvariablen des Agenten und ihre Einstellung finden Sie unter Konfiguration des Amazon-ECS-Container-Agenten und Bootstrapping von Amazon-ECS-Linux-Container-Instances zur Weitergabe von Daten.
Wenn Sie 8 192 MiB für die Aufgabe angeben und keine Ihrer Container-Instances 8 192 MiB oder mehr Arbeitsspeicher zur Verfügung haben, um diese Anforderung zu erfüllen, kann die Aufgabe nicht in Ihrem Cluster platziert werden. Wenn Sie eine verwaltete Rechenumgebung verwenden, AWS Batch müssen Sie einen größeren Instance-Typ starten, um die Anfrage zu bearbeiten.
Der Amazon-ECS-Container-Agent verwendet die Docker-Funktion ReadMemInfo() für die Abfrage des gesamten für das Betriebssystem verfügbaren Arbeitsspeichers. Sowohl Linux als auch Windows bieten bietet Befehlszeilen-Hilfsprogramme, um die Gesamtmenge an Arbeitsspeicher zu bestimmen.
Beispiel – Bestimmung des Gesamtspeichers für Linux
Der Befehl free gibt Informationen darüber zurück, wie viel Speicher insgesamt vom Betriebssystem erkannt wird.
$free -b
Beispielausgabe für eine m4.large-Instance, die das Amazon-ECS-optimierte Amazon Linux-AMI ausführt.
total used free shared buffers cached Mem:8373026816348180480 8024846336 90112 25534464 205418496 -/+ buffers/cache: 117227520 8255799296
Diese Instance verfügt über 8373026816 Bytes Gesamtspeicher, und es stehen 7985 MiB für Aufgaben zur Verfügung.
Beispiel – Bestimmung des Gesamtspeichers für Windows
Der Befehl wmic gibt Informationen darüber zurück, wie viel Speicher insgesamt vom Betriebssystem erkannt wird.
C:\>wmic ComputerSystem get TotalPhysicalMemory
Beispielausgabe für eine m4.large-Instance, die das Amazon-ECS-optimierte AMI für Windows Server ausführt.
TotalPhysicalMemory8589524992
Diese Instance verfügt über 8589524992 Bytes Gesamtspeicher, und es stehen 8191 MiB für Aufgaben zur Verfügung.
Arbeitsspeicher für Container-Instances anzeigen
Sie können in der Amazon ECS-Konsole (oder bei der DescribeContainerInstancesAPI-Operation) sehen, mit wie viel Speicher sich eine Container-Instance registriert. Wenn Sie versuchen, Ihre Ressourcennutzung zu maximieren, indem Sie Ihren Aufgaben so viel Arbeitsspeicher wie möglich für einen bestimmten Instance-Typ bereitstellen, können Sie den für diese Container-Instance verfügbaren Arbeitsspeicher beobachten und dann Ihren Aufgaben soviel Arbeitsspeicher zuordnen.
So können Sie den Arbeitsspeicher für Container-Instances anzeigen
Öffnen Sie die Konsole auf https://console.aws.amazon.com/ecs/Version
2. -
Wählen Sie im Navigationsbereich Cluster und dann den Cluster aus, der Ihre Container-Instance hostet.
-
Wählen Sie Infrastruktur und dann unter Container-Instances eine Container-Instance aus.
-
Der Abschnitt Ressourcen zeigt den registrierten und verfügbaren Arbeitsspeicher für die Container-Instance an.
Der Registrierte Speicherwert gibt den Wert der Container-Instance an, die beim ersten Start bei Amazon ECS registriert wurde, und der Verfügbare Speicherwert gibt an, was noch nicht den Aufgaben zugeordnet wurde.