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 |
Beendigungen des Speicherschutzes identifizieren 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
oder143
.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 undreason
aufProcessKilledDueToMemoryPressure
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:"
- In Dataproc wird der kumulative Messwert
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 dendataproc.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.
- Prüfen Sie das
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 dasgoogle.dataproc.oom-killer
-Log oder dasdataproc.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.