Wie behebe ich OutOfMemory-Fehler in Amazon ECS?

Letzte Aktualisierung: 17.03.2022

Ich möchte Probleme mit der Speicherauslastung in meiner Amazon Elastic Container Service (Amazon ECS) -Aufgabe beheben.

-oder-

Die Container in meiner Amazon-ECS-Aufgabe werden aufgrund eines OutOfMemory-Fehlers beendet.

Kurzbeschreibung

Standardmäßig hat ein Container keine Ressourcenbeschränkungen und kann so viele Ressourcen verwenden, wie es der Kernel-Scheduler des Hosts zulässt. Mit Docker können Sie die Menge an Speicher steuern, die von einem Container verwendet wird. Achten Sie darauf, dass ein laufender Container nicht den größten Teil des Speichers des Host-Rechners verbraucht. Wenn der Kernel auf Linux-Hosts feststellt, dass nicht genügend Speicher vorhanden ist, um wichtige Systemfunktionen auszuführen, löst er eine OutOfMemory-Ausnahme aus und beendet die Prozesse, um Speicher freizugeben.

Mit Docker können Sie eine der folgenden Optionen verwenden:

  • Harte Speicherbeschränkungen, die es dem Container ermöglichen, nicht mehr als eine bestimmte Menge an Benutzer- oder Systemspeicher zu verwenden
  • Weiche Limits, die es dem Container ermöglichen, so viel Speicher wie erforderlich zu verwenden, sofern nicht bestimmte Bedingungen, wie z. B. wenig Speicher oder Konflikte auf dem Host-Computer, eintreten

Wenn eine Amazon-ECS-Aufgabe aufgrund von OutOfMemory-Problemen beendet wird, wird möglicherweise die folgende Fehlermeldung angezeigt:

OutOfMemoryError: Container killed due to memory usage

Sie erhalten diesen Fehler, wenn ein Container in Ihrer Aufgabe beendet wird, weil die Prozesse im Container mehr Speicher verbrauchen als die Menge, die in der Aufgabendefinition zugewiesen wurde.

Auflösung

Gehen Sie wie folgt vor, um OutOfMemory-Fehler in Ihrer Amazon-ECS-Aufgabe zu beheben:

stats max(MemoryUtilized) as mem, max(MemoryReserved ) as memreserved by bin (5m) as period, TaskId, ContainerName
| sort period desc | filter ContainerName like “example-container-name” | filter TaskId = “example-task-id”

Gehen Sie wie folgt vor, um das Risiko einer Instabilität von Aufgaben aufgrund von OutOfMemory-Problemen zu minimieren:

  • Führen Sie Tests durch, um die Speicheranforderungen Ihrer Anwendung zu verstehen, bevor Sie die Anwendung in Produktion nehmen. Sie können einen Lasttest für den Container innerhalb eines Hosts oder Servers durchführen und dann die Speichernutzung der Container mithilfe von Docker-Statistiken überprüfen.
  • Stellen Sie sicher, dass Ihre Anwendung nur auf Hosts mit ausreichenden Ressourcen ausgeführt wird.
  • Beschränken Sie die Menge an Speicher, die Ihr Container verwenden kann. Sie können dies tun, indem Sie die entsprechenden Werte für das harte Limit und das weiche Limit für Ihre Container festlegen. Amazon ECS verwendet eine Reihe von Parametern für die Zuweisung von Speicher zu Aufgaben: memoryReservation für Soft-Limit und Speicher für hartes Limit. Wenn Sie diese Werte angeben, werden sie von den verfügbaren Speicherressourcen für die Container-Instance abgezogen, auf der Container platziert ist.
    Hinweis: Der Parameter memoryReservation wird für Windows-Container nicht unterstützt.
  • Sie können swap für Container mit hohem transienten Speicherbedarf einschalten. Dadurch wird die Wahrscheinlichkeit von OutOfMemory-Fehlern verringert, wenn der Container unter hoher Last steht.
    Hinweis: Wenn Sie Aufgaben verwenden, die den Starttyp AWS Fargate verwenden, werden die Parameter MaxSwap und SharedMemorySize nicht unterstützt.
    Wichtig: Achten Sie darauf, wenn Sie Swap auf Ihren Docker-Hosts konfigurieren. Das Einschalten von Swap kann Ihre Anwendung verlangsamen und die Leistung verringern. Diese Funktion verhindert jedoch, dass Ihrer Anwendung der Systemspeicher ausgeht.

War dieser Artikel hilfreich?


Benötigen Sie Hilfe zur Fakturierung oder technischen Support?