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
oder143
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 setztreason
aufProcessKilledDueToMemoryPressure
. 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:"
- Dataproc erhöht den kumulativen Messwert
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 oderdataproc.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.
- Prüfen Sie das
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 dasgoogle.dataproc.oom-killer
-Log oderdataproc.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.