Fehlerbehebung bei VM-Fehlern aufgrund von fehlendem Arbeitsspeicher

Auf dieser Seite finden Sie Informationen zu Fehlern aufgrund fehlenden Speichers (Out-of-Memory, OOM) in Dataproc auf Compute Engine-VMs. Außerdem werden Schritte zur Fehlerbehebung und Behebung von OOM-Fehlern beschrieben.

Auswirkungen von OOM-Fehlern

Wenn auf Dataproc-VMs in Compute Engine Fehler vom Typ „Out of Memory“ (OOM) auftreten, sind die Auswirkungen unter anderem die folgenden:

  • Master- und Worker-VMs frieren für einen bestimmten Zeitraum ein.

  • OOM-Fehler bei Master-VMs führen dazu, dass Jobs mit „task not acquired“-Fehlern fehlschlagen.

  • OOM-Fehler (Out-of-Memory) bei Worker-VMs führen zu einem Verlust des Knotens in YARN HDFS, was die Ausführung von Dataproc-Jobs verzögert.

YARN-Speichersteuerungselemente

Apache YARN bietet die folgenden Arten von Speichersteuerungen:

  • Polling-basiert (alt)
  • Strikt
  • Elastic

Standardmäßig wird yarn.nodemanager.resource.memory.enabled in Dataproc nicht festgelegt, um YARN-Speichersteuerungen zu aktivieren. Das hat folgende Gründe:

  • Eine strenge Arbeitsspeicherverwaltung kann dazu führen, dass Container beendet werden, obwohl ausreichend Arbeitsspeicher vorhanden ist, wenn die Containergrößen nicht richtig konfiguriert sind.
  • Die Anforderungen für die Steuerung des elastischen Speichers können sich negativ auf die Ausführung von Jobs auswirken.
  • YARN-Speichersteuerungen können OOM-Fehler möglicherweise nicht verhindern, wenn Prozesse aggressiv Speicher belegen.

Dataproc-Speicherschutz

Wenn eine Dataproc-Cluster-VM unter Speichermangel leidet, beendet der Dataproc-Speicherschutz Prozesse oder Container, bis die OOM-Bedingung behoben ist.

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

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
Driver Pool VM Nicht verfügbar 2.0.76+ 2.1.24+ Alle

Beendigung des Speicherschutzes erkennen und bestätigen

Anhand der folgenden Informationen können Sie Jobbeendigungen aufgrund von Speichermangel identifizieren und bestätigen.

Prozessbeendigungen

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

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

    • Dataproc erhöht den kumulativen Messwert dataproc.googleapis.com/node/problem_count und setzt reason auf ProcessKilledDueToMemoryPressure. Weitere Informationen finden Sie unter Erfassung von Messwerten für Dataproc-Ressourcen.
    • Dataproc schreibt ein google.dataproc.oom-killer-Log mit der Meldung: "A process is killed due to memory pressure: process name. Wenn Sie diese Meldungen aufrufen möchten, aktivieren Sie das Logging und verwenden Sie dann den folgenden Logfilter:
      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:"
      

Beenden von Jobs für Master- oder Driver-Knotenpools

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

    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 dataproc.googleapis.com/node/problem_count, um zu bestätigen, dass der Job durch Dataproc Memory Protection beendet wurde (siehe Prozessbeendigungen).

    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 den Cluster neu und verringern Sie die maximale Anzahl gleichzeitiger Jobs, die im Cluster ausgeführt werden.
    • Verwenden Sie einen Masterknoten-Maschinentyp mit mehr Arbeitsspeicher.

Beenden von YARN-Containern auf Worker-Knoten

  • Dataproc schreibt die folgende Meldung in den YARN-Ressourcenmanager: container id exited with code EXIT_CODE. Wenn Sie diese Meldungen aufrufen möchten, aktivieren Sie das Logging und verwenden Sie dann den folgenden Logfilter:

    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 dataproc.googleapis.com/node/problem_count, um zu bestätigen, dass der Job durch Dataproc Memory Protection beendet wurde (siehe Prozessbeendigungen).

    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 Speichermenge gesteuert, die für die Planung von YARN-Containern verwendet wird.
    • Wenn Jobcontainer immer wieder fehlschlagen, prüfen Sie, ob die Datenverteilung eine erhöhte Nutzung bestimmter Container verursacht. Wenn ja, partitionieren Sie den Job neu oder erhöhen Sie die Worker-Größe, um den zusätzlichen Arbeitsspeicheranforderungen gerecht zu werden.