Warum bleibt mein AWS Batch-Job im Status RUNNABLE hängen?

Lesedauer: 11 Minute
0

Mein AWS Batch-Job ist im Status RUNNABLE hängengeblieben.

Kurzbeschreibung

AWS Batch verschiebt einen Job in den Status RUNNABLE, wenn der Job keine ausstehenden Abhängigkeiten aufweist und für einen Host geplant werden kann. RUNNABLE Jobs starten, sobald in einer der Rechenumgebungen, die der Warteschlange des Jobs zugeordnet sind, genügend Ressourcen verfügbar sind.

Wenn die für die Ausführung eines Jobs die erforderlichen Ressourcen nicht verfügbar sind, kann der Job möglicherweise auf unbestimmte Zeit im Status RUNNABLE verbleiben. Weitere Informationen finden Sie unter Jobs, die im Status RUNNABLE hängen geblieben sind.

Verwenden Sie das Runbook AWSSupport-TroubleshootAWSBatchJob, um Probleme mit dem AWS Batch-Job zu beheben, der im Status RUNNABLE hängengeblieben ist. Lesen Sie dann im Abschnitt Ausgaben nach, um die mögliche Ursache des Problems und die Schritte zu seiner Behebung zu ermitteln.

Hinweis: Dieser Artikel behandelt die Fehlerbehebung für Amazon Elastic Container Service (Amazon ECS) auf Amazon Elastic Compute Cloud (Amazon EC2) und Amazon ECS auf AWS Fargate. Informationen zur Fehlerbehebung bei AWS Batch auf Amazon Elastic Kubernetes Service (Amazon EKS) finden Sie unter AWS Batch auf Amazon EKS.

Behebung

Runbook AWSSupport-TroubleshootAWSBatchJob SAW verwenden

Verwenden Sie AWS Support Automation Workflows (AWS SAW), um diesen Fehlerbehebungsprozess zu automatisieren. Informationen zur Verwendung des Runbook AWSSupport-TroubleshootAWSBatchJob finden Sie unter Wie kann ich ein SAW-Runbook verwenden, um Fehler bei meinem AWS Batch-Job zu beheben, der im Status RUNNABLE hängengeblieben ist?

Wenn dieses Runbook Ihnen nicht dabei hilft, das Problem zu identifizieren, lesen Sie die folgenden Abschnitte, um die Probleme mit Ihrem hängengebliebenen Job manuell zu beheben.

Stellen Sie sicher, dass Ihre Rechenumgebung über genügend Ressourcen verfügt, um Ihren Job auszuführen

  1. Öffnen Sie die AWS-Batch-Konsole.

  2. Wählen Sie Dashboard aus.

  3. Wählen Sie im Bereich Übersicht der Auftragswarteschlange in der Spalte RUNNABLE den Job aus, der im Status RUNNABLE hängengeblieben ist. Die Seite mit den Jobdetails wird angezeigt.

  4. Überprüfen Sie auf der Seite Jobdetails im Abschnitt Container die Werte für vCPUs, Speicher und GPUs. Sie benötigen diese Werte, um die Schritte 9-10 abzuschließen.

  5. Wählen Sie auf der Seite Auftragswarteschlangen eine Auftragswarteschlange aus und überprüfen Sie die zugehörigen Rechenumgebungen, da Ihr Job in jeder Rechenumgebung ausgeführt werden kann. Wiederholen Sie im Anschluss die Schritte 6-10 für die einzelnen Rechenumgebungen.

  6. Wählen Sie auf der Seite Rechenumgebungen eine Rechenumgebung aus, um deren Berechtigungen zu überprüfen.

  7. Stellen Sie sicher, dass die Spalte Status der Rechenumgebung auf VALID gesetzt ist. Stellen Sie außerdem sicher, dass die mit der Umgebung verknüpfte Servicerolle über alle erforderlichen Berechtigungen verfügt.

Hinweis: Bei zeitweiligen oder vorübergehenden Fehlern kann es einige Minuten dauern, bis sich der Status der Rechenumgebung von VALID auf INVALID ändert.

  1. Stellen Sie sicher, dass die Spalte Status auf ENABLED gesetzt ist.

  2. Stellen Sie sicher, dass der Wert Max vCPUs hoch genug ist, damit AWS Batch die Anzahl der Gewünschten vCPUs für die Ausführung von Jobs erhöhen kann.

Hinweis: Wenn Sie eine AWS Fargate-Rechenumgebung verwenden, fahren Sie mit dem Abschnitt Überprüfen Sie die Netzwerk- und Sicherheitseinstellungen der Rechenumgebung fort.

  1. Stellen Sie sicher, dass der Wert Gewünschte vCPUs mit der Anzahl der vCPUs übereinstimmt oder höher ist als die Anzahl der vCPUs, die der Job ausführen muss.

Wenn Gewünschte vCPUs 0 ist, überprüfen Sie die Menge an Speicher und CPU-Ressourcen, die für Ihren Amazon EC2-Instance-Typ verfügbar sind.

-oder-

Wenn Gewünschte vCPU größer als 0 ist oder sich Ihr Job immer noch im Status RUNNABLE befindet, führen Sie die Schritte im nächsten Abschnitt aus.

Wichtig: Mindestens einer der Instance-Typen für Ihre Rechenumgebung muss über mehr Speicher verfügen, als in Ihrem Job angegeben. Außerdem muss der Instance-Typ über CPU-Ressourcen verfügen, die den in Ihrem Job angegebenen Ressourcen entsprechen oder höher als diese sind. Wenn mindestens ein Instance-Typ nicht über genügend Speicher oder CPU-Ressourcen verfügt, um Ihren Job auszuführen, brechen Sie den Job ab. Führen Sie einen neuen Job aus, der weniger CPU oder Speicher benötigt. Erstellen Sie alternativ eine neue Rechenumgebung mit genügend Ressourcen, um den Job auszuführen, und weisen Sie den Job dann der entsprechenden Auftragswarteschlange zu.

Stellen Sie sicher, dass Ihre Rechenumgebung über Instances verfügt und dass die Instances für die Ausführung Ihres Jobs verfügbar sind

Für die Rechenumgebung, die Sie zur Ausführung Ihres Jobs ausgewählt haben, führen Sie die folgenden Schritte aus:

  1. Öffnen Sie die Amazon-ECS-Konsole.

2.    Wählen Sie im Navigationsbereich die Option Clusters aus. Wählen Sie dann den Cluster aus, der Ihren Job enthält.

Allgemeine Anweisungen zur ECS-Fehlerbehebung finden Sie unter Amazon ECS-Fehlerbehebung.

Hinweis: Der Name des Clusters beginnt mit dem Namen der Rechenumgebung. Darauf folgt _Batch_ und ein zufälliger Hash aus Zahlen und Buchstaben.

  1. Wählen Sie die Ansicht ECS-Instances aus. Stellen Sie anschließend sicher, dass Container-Instances für die Ausführung Ihres Jobs verfügbar sind.

  2. Wenn der Cluster über eine Container-Instance verfügt, um Ihren Job auszuführen, überprüfen Sie den Status des Docker-Daemon. Überprüfen Sie anschließend den Status des Amazon ECS-Container-Agent.

**Hinweis:**Weitere Informationen finden Sie unter Wie behebe ich Probleme mit einem getrennten Amazon ECS-Agent?

Wenn der Amazon ECS-Cluster keine Instances enthält, überprüfen Sie, ob Instances in Ihrer Rechenumgebung erstellt werden können. Führen Sie je nach Rechenumgebung eines der folgenden Verfahren aus, um zu überprüfen, ob Ihre Instances erstellt werden können.

Gehen Sie wie folgt vor, um zu überprüfen, ob Ihre Instances in einer On-Demand-Rechenumgebung erstellt werden können:

  1. Öffnen Sie die Amazon-EC2-Konsole.

  2. Wählen Sie im linken Navigationsbereich Auto-Scaling-Gruppen aus.

  3. Geben Sie unter Filter den Namen Ihrer Rechenumgebung ein.

Hinweis: Amazon EC2 kann mehr als eine Auto-Scaling-Gruppe für dieselbe Rechenumgebung erstellen.

  1. Wählen Sie für die einzelnen Auto-Scaling-Gruppen die Ansicht Aktivitätsverlauf aus. Suchen Sie dann nach Blockierungsproblemen.

In der Spalte Status wird Fehlgeschlagen angezeigt, falls Probleme auftreten, die den Start der Instances verhindern.

Wenn Ihr Konto beispielsweise die maximale Anzahl von Instances erreicht, gibt Amazon EC2 möglicherweise eine Meldung zurück, die dem folgenden Beispiel ähnelt:

Launching a new EC2 instance. Status Reason: Your quota allows for 0 more running instance(s). You requested at least 1. Launching EC2 instance failed.

Das Ereignis enthält einen Zeitstempel in UTC ab dem Zeitpunkt, zu dem Sie den Job eingereicht haben:

At 2018-09-03T05:54:30Z a user request update of AutoScalingGroup constraints to min: 0, max: 1, desired: 1 changing the desired capacity from 0 to 1.
At 2018-09-03T05:54:52Z an instance was started in response to a difference between desired and actual capacity, increasing the capacity from 0 to 1.

Hinweis: AWS Batch fordert Instances in Ihrem Namen an. Wenn Sie die Auto-Scaling-Gruppen manuell ändern, wird Ihre Rechenumgebung möglicherweise ungültig. Weitere Informationen zu Instance-Limits und dazu, wie Sie eine Limiterhöhung beantragen können, finden Sie unter Amazon EC2 Service Quotas.

  1. Wenn die Auto-Scaling-Gruppe in den letzten Ereignissen nur erfolgreiche Ereignisse anzeigt, führen Sie die Schritte im folgenden Abschnitt aus.

Wichtig: Für die serviceverknüpfte AWS Identity and Access Management (IAM)-Rolle AWSServiceRoleForAutoScaling müssen bestimmte Berechtigungen festgelegt werden. Die IAM-Rolle AWSServiceRoleForAutoScaling muss mindestens über Benutzerzugriff auf den vom Kunden verwalteten AWS Key Management Service (AWS KMS)-Schlüssel verfügen. Dies ist in Umgebungen mit benutzerdefinierten Amazon Machine Images (AMIs), verschlüsselten Amazon Elastic Block Store (Amazon EBS)-Volumes und kundenverwalteten AWS-KMS-Schlüsseln erforderlich. Weitere Informationen finden Sie in den Abschnitten zu den Schlüsselrichtlinien, die den Zugriff auf den vom Kunden verwalteten Schlüssel ermöglichen.

Gehen Sie wie folgt vor, um zu überprüfen, ob Ihre Instances in einer Spot-Rechenumgebung erstellt werden können:

  1. Öffnen Sie die Amazon-EC2-Konsole.

  2. Wählen Sie im Navigationsbereich Instances aus. Wählen Sie anschließend Spot-Anforderungen aus.

  3. Wählen Sie im Filter für Anforderungstyp die Option Flotte aus.

  4. Wählen Sie für Status die Option Aktiv aus.

  5. Wählen Sie Beschreibung aus. Überprüfen Sie anschließend den Wert für die Gesamtzielkapazität, um festzustellen, ob die Spot-Instance-Anfrage erfüllt wurde. Wenn keine Instance erstellt wurde, suchen Sie in der Verlaufsansicht nach einer Meldung, die den Grund hierfür erläutert. Bei Anfragen, bei denen ein Angebotspreis nicht erreicht werden kann, wird beispielsweise eine Meldung ähnlich dem folgenden Beispiel zurückgegeben:

m4.large, ami-aff65ad2, Linux/UNIX (Amazon VPC), us-east-1a, Spot bid price is less than Spot market price $0.0324
  1. Wählen Sie einen geeigneten Gebotsprozentsatz für Ihre Rechenumgebung. Stellen Sie sicher, dass Sie eine neue Rechenumgebung erstellen, falls Sie den Angebotspreis ändern. Weitere Informationen finden Sie unter Preisverlauf für Spot Instances.

**Hinweis:**AWS Batch erstellt Spot-Flottenanfragen in Ihrem Namen. Vermeiden Sie es, Spot-Flottenanfragen manuell zu ändern, da Ihre Rechenumgebung sonst möglicherweise ungültig wird.

  1. Wenn die neuesten Ereignisse der Auto-Scaling-Gruppe nur erfolgreiche Ereignisse anzeigen, führen Sie die Schritte im nächsten Abschnitt aus.

Überprüfen Sie die IAM-Rolle der Container-Instance

  1. Öffnen Sie die AWS-Batch-Konsole.

  2. Wählen Sie im Navigationsbereich Rechenumgebungen aus. Wählen Sie dann Ihre Rechenumgebung aus.

  3. Kopieren Sie im Abschnitt Details zur Rechenumgebung den Namen der Instance-Rolle.

  4. Öffnen Sie die IAM-Konsole.

  5. Geben Sie in das Suchfeld den Namen der Instance-Rolle ein. Wählen Sie dann Ihre Instance-Rolle aus den Ergebnissen aus.

  6. Wählen Sie die Ansicht Berechtigungen aus. Vergewissern Sie sich anschließend, dass die von AmazonEC2ContainerServiceforEC2Role verwaltete Richtlinie an die Rolle angehängt ist. Wenn die Richtlinie angehängt ist, ist Ihre Instance-Rolle ordnungsgemäß konfiguriert und Sie können mit Schritt 11 fortfahren.

  7. Wählen Sie Richtlinien anhängen aus.

  8. Geben Sie in das Suchfeld AmazonEC2ContainerServiceforEC2Role ein.

  9. Aktivieren Sie das Kontrollkästchen für die Richtlinie AmazonEC2ContainerServiceforEC2Role. Wählen Sie dann Richtlinie anhängen aus.

  10. Wählen Sie die Ansicht Vertrauensbeziehungen aus. Wählen Sie dann Vertrauensbeziehung bearbeiten aus.

  11. Stellen Sie sicher, dass das Vertrauensverhältnis die folgenden Richtlinien enthält:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": "ec2.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
  1. Wenn die Vertrauensbeziehung mit der Richtlinie im vorherigen Beispiel übereinstimmt, wählen Sie Abbrechen.

-oder-

Wenn das Vertrauensverhältnis nicht mit der Richtlinie im vorherigen Beispiel übereinstimmt, kopieren Sie die Richtlinie in die Konsole Richtliniendokument. Wählen Sie dann Vertrauensrichtlinie aktualisieren aus.

Wenn Ihre Instance immer noch nicht dem Amazon ECS-Cluster beitritt, führen Sie die Schritte im nächsten Abschnitt aus.

Überprüfen Sie die Netzwerk- und Sicherheitseinstellungen der Rechenumgebung

  1. Öffnen Sie die AWS-Batch-Konsole.

  2. Wählen Sie im Navigationsbereich Rechenumgebungen aus. Wählen Sie dann Ihre Rechenumgebung aus.

  3. Kopieren Sie im Abschnitt Rechenressourcen die Werte für Subnetze und Sicherheitsgruppen.

  4. Öffnen Sie die Amazon Virtual Private Cloud (Amazon VPC)-Konsole.

  5. Wählen Sie im Navigationsbereich die Option Subnetze aus.

  6. Wählen Sie für jedes Subnetz in der Rechenumgebung Beschreibung aus. Überprüfen Sie anschließend die Werte für Öffentliche IPv4-Adresse automatisch zuweisen.

Wenn der Wert Öffentliche IPv4-Adresse automatisch zuweisen Ja lautet, verfügen die im Subnetz gestarteten Instances über folgende Eigenschaften:

  • Eine öffentliche IPv4-Adresse
  • Eine Routing-Tabelle mit einem Routenziel von 0.0.0.0/0
  • Ein Internet-Gateway, das auf Ziel gesetzt ist (zum Beispiel: igw-1a2b3c4d)

Wenn der Wert Öffentliche IPv4-Adresse automatisch zuweisen Nein lautet, verfügen die im Subnetz gestarteten Instances über folgende Eigenschaften:

  • Eine private IPv4-Adresse
  • Eine Routing-Tabelle mit einem Routenziel von 0.0.0.0/0
  • Ein NAT-Gateway, das auf Ziel gesetzt ist (zum Beispiel: nat-12345678901234567).

Hinweis: Weitere Informationen finden Sie im Abschnitt Routing unter Beispiel: VPC mit Servern in privaten Subnetzen und NAT.

  1. Wählen Sie im Navigationsbereich Sicherheitsgruppen aus.

  2. Wählen Sie für jede in der Rechenumgebung angegebene Sicherheitsgruppe die Ansicht Ausgangsregeln aus. Stellen Sie anschließend sicher, dass eine Regel mit den folgenden Einstellungen vorhanden ist:

  • Wählen Sie unter Typ die Option ALL Traffic aus.
  • Wählen Sie für Protokoll die Option ALL aus.
  • Wählen Sie für Port- Bereich die Option ALL aus.
  • Wählen Sie als Ziel 0.0.0.0/0 aus.

**Wichtig:**Wenn die Regel nicht existiert, wählen Sie Bearbeiten. Erstellen Sie dann die Regel. Für eine restriktivere Regel für ausgehenden Datenverkehr wählen Sie HTTPS (443) für Typ und 0.0.0.0/0 für Ziel aus.

  1. Wählen Sie im Navigationsbereich Netzwerk-ACLs aus.

  2. Wählen Sie die Netzwerk-Zugriffssteuerungsliste (Netzwerk-ACL) der VPC aus.

  3. Vergewissern Sie sich, dass die Standard-Netzwerk-ACL so konfiguriert ist, dass der gesamte Datenverkehr in die zugehörigen Subnetze ein- und ausfließen kann.

Wichtig: Wenn Sie die ACL geändert haben, fügen Sie eine Regel hinzu, die den ausgehenden IPv4-HTTPS-Verkehr vom Subnetz ins Internet zulässt. Weitere Informationen finden Sie unter Steuern des Datenverkehrs zu EC2-Instances mit Sicherheitsgruppen und Steuern des Datenverkehrs zu Subnetzen mit Netzwerk-ACLs. Um die VPC, die Subnetze oder Sicherheitsgruppen zu ändern, erstellen Sie eine neue Rechenumgebung.

Wenn Ihre Instance dem Amazon ECS-Cluster immer noch nicht beitritt, stellen Sie eine Verbindung zu Ihrer Instance her. Überprüfen Sie dann den Status des Docker-Daemon und des Amazon ECS-Container-Agent.

Hinweis: Die Verfahren in diesem Artikel decken nicht alle möglichen Ursachen und die Möglichkeiten zu deren Behebung ab. Für zusätzliche Problembehebungen bei einem AWS Batch-Job, der im Status RUNNABLE feststeckt, verwenden Sie AWS CloudTrail. Suchen Sie nach Ereignissen, bei denen das Attribut Benutzername auf aws-batch gesetzt ist, um Fehler zu untersuchen, die bei geplanten Aufgaben auftreten.

Ähnliche Informationen

Herstellung einer Verbindung zu Ihrer Linux-Instance

Herstellung einer Verbindung zu Ihrer Windows-Instance

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 4 Monaten