Fehlerbehebung bei VM-Fehlern aufgrund von fehlendem Arbeitsspeicher

Auf dieser Seite finden Sie Informationen zu OOM-Fehlern (Out of Memory) von Dataproc auf Compute Engine-VMs und Schritte zur Fehlerbehebung.

Auswirkungen von OOM-Fehlern

Wenn bei Dataproc auf Compute Engine-VMs OOM-Fehler (Out-of-Memory) auftreten, kann das folgende Auswirkungen haben:

  • Master- und Worker-VMs hängen für einen bestimmten Zeitraum.

  • OOM-Fehler bei Master-VMs führen dazu, dass Jobs mit dem Fehler „Task not acquired“ (Aufgabe nicht erworben) fehlschlagen.

  • OOM-Fehler bei Worker-VMs führen zum Verlust des Knotens in YARN HDFS, was die Ausführung des Dataproc-Jobs verzögert.

YARN-Speichersteuerung

Apache YARN bietet die folgenden Arten von Speichersteuerungen:

  • Umfragebasiert (alt)
  • Strikt
  • Elastic

In Dataproc wird yarn.nodemanager.resource.memory.enabled standardmäßig nicht so festgelegt, dass YARN-Speichersteuerungen aktiviert werden. Das hat folgende Gründe:

  • Eine strenge Speicherkontrolle kann dazu führen, dass Container beendet werden, obwohl ausreichend Arbeitsspeicher vorhanden ist, wenn die Containergrößen nicht richtig konfiguriert sind.
  • Anforderungen an die elastische Speichersteuerung können sich negativ auf die Jobausführung auswirken.
  • Die YARN-Speichersteuerung kann OOM-Fehler nicht verhindern, wenn Prozesse aggressiv Speicher verbrauchen.

Dataproc-Speicherschutz

Wenn bei einer Dataproc-Cluster-VM ein Arbeitsspeichermangel auftritt, beendet der Dataproc-Speicherschutz Prozesse oder Container, bis der OOM-Zustand behoben ist.

Dataproc bietet Speicherschutz für die folgenden Clusterknoten in den folgenden Dataproc-Image-Versionen in der Compute Engine:

Rolle 1,5 2.0 2.1 2.2
Master-VM 1.5.74+ 2.0.48+ Alle Alle
Worker-VM Nicht verfügbar 2.0.76+ 2.1.24+ Alle
VM für Fahrerpool Nicht verfügbar 2.0.76+ 2.1.24+ Alle

Beendigung des Speicherschutzes erkennen und bestätigen

Anhand der folgenden Informationen können Sie Jobs identifizieren und bestätigen, die aufgrund von Arbeitsspeichermangel beendet wurden.

Prozessbeendigung

  • Prozesse, die vom Dataproc-Speicherschutz beendet werden, beenden mit dem Code 137 oder 143.

  • Wenn Dataproc einen Prozess aufgrund von Speicherdruck beendet, können die folgenden Aktionen oder Bedingungen auftreten:

    • In Dataproc wird der kumulative Messwert dataproc.googleapis.com/node/problem_count erhöht und reason auf ProcessKilledDueToMemoryPressure gesetzt. Weitere Informationen finden Sie unter Erfassung von Dataproc-Ressourcenmesswerten.
    • Dataproc schreibt ein google.dataproc.oom-killer-Protokoll mit der Meldung: "A process is killed due to memory pressure: process name. Wenn Sie diese Meldungen sehen möchten, aktivieren Sie das Logging und verwenden Sie dann den folgenden Log-Filter:
      resource.type="cloud_dataproc_cluster"
      resource.labels.cluster_name="CLUSTER_NAME"
      resource.labels.cluster_uuid="CLUSTER_UUID"
      jsonPayload.message:"A process is killed due to memory pressure:"
      

Beendigung von Jobs auf Masterknoten oder im Treiberknotenpool

  • Wenn ein Dataproc-Job auf einem Masterknoten oder in einem Treiberknotenpool aufgrund von Arbeitsspeichermangel beendet wird, schlägt der Job mit dem Fehlercode Driver received SIGTERM/SIGKILL signal and exited with INT fehl. Wenn Sie diese Meldungen sehen möchten, aktivieren Sie das Logging und verwenden Sie dann den folgenden Log-Filter:

    resource.type="cloud_dataproc_cluster"
    resource.labels.cluster_name="CLUSTER_NAME"
    resource.labels.cluster_uuid="CLUSTER_UUID"
    jsonPayload.message:"Driver received SIGTERM/SIGKILL signal and exited with"
        

    • Prüfen Sie das google.dataproc.oom-killer-Log oder den dataproc.googleapis.com/node/problem_count-Wert, um festzustellen, ob der Job durch den Dataproc-Speicherschutz beendet wurde (siehe Prozessbeendigung).

    Lösungen:

    • Wenn der Cluster einen Treiberpool hat, erhöhen Sie driver-required-memory-mb auf die tatsächliche Arbeitsspeichernutzung des Jobs.
    • Wenn der Cluster keinen Treiberpool hat, erstellen Sie ihn neu und senken Sie die maximale Anzahl gleichzeitiger Jobs, die im Cluster ausgeführt werden.
    • Verwenden Sie einen Maschinentyp für Masterknoten mit mehr Arbeitsspeicher.

Beendigung von YARN-Containern auf Worker-Knoten

  • Dataproc schreibt die folgende Nachricht in den YARN-Ressourcenmanager: container id exited with code EXIT_CODE. Wenn Sie diese Nachrichten sehen möchten, aktivieren Sie das Logging und verwenden Sie dann den folgenden Log-Filter:

    resource.type="cloud_dataproc_cluster"
    resource.labels.cluster_name="CLUSTER_NAME"
    resource.labels.cluster_uuid="CLUSTER_UUID"
    jsonPayload.message:"container" AND "exited with code" AND "which potentially signifies memory pressure on NODE
    
  • Wenn ein Container mit code INT beendet wurde, prüfen Sie das google.dataproc.oom-killer-Log oder das dataproc.googleapis.com/node/problem_count-Log, um festzustellen, ob der Job vom Dataproc-Speicherschutz beendet wurde (siehe Prozessbeendigung).

    Lösungen:

    • Prüfen Sie, ob die Containergrößen richtig konfiguriert sind.
    • Sie sollten yarn.nodemanager.resource.memory-mb verringern. Mit dieser Eigenschaft wird die Menge des Arbeitsspeichers gesteuert, die für die Planung von YARN-Containern verwendet wird.
    • Wenn Jobcontainer immer wieder fehlschlagen, prüfen Sie, ob ein Datenskew zu einer erhöhten Nutzung bestimmter Container führt. Falls ja, partitionieren Sie den Job neu oder erhöhen Sie die Größe der Worker, um zusätzlichen Arbeitsspeicher zu erhalten.