Auf dieser Seite finden Sie Informationen zu OOM-Fehlern (Out-of-Memory-Fehler) bei Compute Engine-VMs mit Managed Service for Apache Spark und Schritte zur Fehlerbehebung und Behebung von OOM-Fehlern.
Auswirkungen von OOM-Fehlern
Wenn bei Managed Service for Apache Spark-VMs OOM-Fehler 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 Fehlern vom Typ „task not acquired“ fehlschlagen.
OOM-Fehler bei Worker-VMs führen zu einem Verlust des Knotens in YARN HDFS, wodurch sich die Ausführung von Managed Service for Apache Spark-Jobs verzögert.
YARN-Speichersteuerung
Apache YARN bietet die folgenden Arten der Speichersteuerung:
- Polling-basiert (Legacy)
- Strikt
- Elastisch
Standardmäßig wird in Managed Service for Apache Spark yarn.nodemanager.resource.memory.enabled nicht festgelegt, um die YARN-Speichersteuerung zu aktivieren. Die Gründe dafür sind:
- Eine strikte Speichersteuerung kann dazu führen, dass Container beendet werden, obwohl genügend Arbeitsspeicher vorhanden ist, wenn die Containergrößen nicht richtig konfiguriert sind.
- Die Anforderungen an die elastische Speichersteuerung können sich negativ auf die Jobausführung auswirken.
- Die YARN-Speichersteuerung kann OOM-Fehler möglicherweise nicht verhindern, wenn Prozesse aggressiv Arbeitsspeicher verbrauchen.
Speicherschutz für Managed Service for Apache Spark
Wenn der Arbeitsspeicher einer Managed Service for Apache Spark-Cluster-VM knapp wird, beendet der Speicherschutz von Managed Service for Apache Spark Prozesse oder Container, bis die OOM-Bedingung behoben ist.
Managed Service for Apache Spark bietet Speicherschutz für die folgenden Cluster knoten in den folgenden Managed Service for Apache Spark-Imageversionen:
| 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 den Treiberpool | Nicht verfügbar | 2.0.76+ | 2.1.24+ | Alle |
Beendigungen durch den Speicherschutz identifizieren und bestätigen
Anhand der folgenden Informationen können Sie Jobbeendigungen aufgrund von Arbeitsspeichermangel identifizieren und bestätigen.
Prozessbeendigungen
Prozesse, die vom Speicherschutz von Managed Service for Apache Spark beendet werden, werden mit dem Code
137oder143beendet.Wenn Managed Service for Apache Spark einen Prozess aufgrund von Arbeitsspeichermangel beendet, können die folgenden Aktionen oder Bedingungen auftreten:
- Managed Service for Apache Spark erhöht die kumulative Messwert
dataproc.googleapis.com/node/problem_countund setztreasonaufProcessKilledDueToMemoryPressure. Weitere Informationen finden Sie unter Messwerterhebung für Managed Service for Apache Spark-Ressourcen. - Managed Service for Apache Spark schreibt ein
google.dataproc.oom-killer-Log mit der Meldung:"A process is killed due to memory pressure: process name. Aktivieren Sie Logging, um diese Meldungen aufzurufen, 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:"
- Managed Service for Apache Spark erhöht die kumulative Messwert
Jobbeendigungen für Masterknoten oder Treiberknotenpools
Wenn ein Managed Service for Apache Spark-Job für einen Masterknoten oder einen Treiberknotenpool aufgrund von Arbeitsspeichermangel beendet wird, schlägt der Job mit dem Fehler
Driver received SIGTERM/SIGKILL signal and exited with INTfehl. Aktivieren Sie Logging, um diese Meldungen aufzurufen, 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-killerLog oder dendataproc.googleapis.com/node/problem_countum zu bestätigen, dass der Job vom Speicherschutz von Managed Service for Apache Spark beendet wurde (siehe Prozessbeendigungen).
Lösungen :
- Wenn der Cluster einen
Treiberpool,
hat, erhöhen Sie
driver-required-memory-mbauf 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 Maschinentyp für den Masterknoten mit mehr Arbeitsspeicher.
- Prüfen Sie das
Beendigungen von YARN-Containern für Worker-Knoten
Managed Service for Apache Spark schreibt die folgende Meldung in den YARN Ressourcenmanager:
container id exited with code EXIT_CODE. Aktivieren Sie Logging, um diese Meldungen aufzurufen, 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 INTbeendet wurde, prüfen Sie dasgoogle.dataproc.oom-killerLog oder den Messwertdataproc.googleapis.com/node/problem_countum zu bestätigen, dass der Job vom Speicherschutz von Managed Service for Apache Spark beendet wurde (siehe Prozessbeendigungen).Lösungen :
- Prüfen Sie, ob die Containergrößen richtig konfiguriert sind.
- Erwägen Sie,
yarn.nodemanager.resource.memory-mbzu verringern. Mit dieser Eigenschaft wird die Menge an Arbeitsspeicher gesteuert, die für die Planung von YARN-Containern verwendet wird. - Wenn Jobcontainer immer wieder fehlschlagen, prüfen Sie, ob eine Datenverzerrung zu einer erhöhten Nutzung bestimmter Container führt. Wenn dies der Fall ist, partitionieren Sie den Job neu oder erhöhen Sie die Workergröße, um den zusätzlichen Arbeitsspeicheranforderungen gerecht zu werden.
Linux-Speicherschutz auf dem Masterknoten optimieren (erweitert)
Managed Service for Apache Spark-Masterknoten verwenden das Dienstprogramm earlyoom, um Systemabstürze zu verhindern, indem Arbeitsspeicher freigegeben wird, wenn der verfügbare Arbeitsspeicher kritisch niedrig ist. Die Standardkonfiguration ist für viele Arbeitslasten geeignet. Möglicherweise müssen Sie die Konfiguration jedoch anpassen, wenn Ihr Masterknoten viel Arbeitsspeicher hat und der Arbeitsspeicher schnell verbraucht wird.
In Szenarien mit hohem Arbeitsspeichermangel kann das System in einen Zustand des „Thrashing“ eintreten, in dem es die meiste Zeit mit der Speicherverwaltung verbringt und nicht mehr reagiert. Das kann so schnell geschehen, dass earlyoom aufgrund der Standardeinstellungen nicht reagiert oder nicht reagiert, bevor die OOM-Antwort des Kernels aufgerufen wird.
Hinweis
- Dies ist eine erweiterte Optimierungsoption. Bevor Sie die
earlyoom-Einstellungen anpassen, sollten Sie andere Lösungen in Betracht ziehen, z. B. eine Master-VM mit mehr Arbeitsspeicher verwenden, die Jobparallelität verringern oder die Arbeitsspeichernutzung des Jobs optimieren.
earlyoom-Einstellungen anpassen
Die Standardkonfiguration von earlyoom verwendet eine feste Menge an kostenlosem Arbeitsspeicher als Trigger. Bei VMs mit viel RAM, z. B. 32GB oder
mehr, kann diese feste Menge einen kleinen Teil des Gesamtspeichers darstellen.
Dadurch ist das System anfällig für plötzliche Spitzen bei der Arbeitsspeichernutzung.
Wenn Sie die earlyoom-Einstellungen anpassen möchten, stellen Sie eine Verbindung zum Masterknoten her und ändern Sie die Konfigurationsdatei.
Stellen Sie über SSH eine Verbindung zu Ihrem Masterknoten her.
Öffnen Sie die Konfigurationsdatei zur Bearbeitung:
sudo nano /etc/default/earlyoomPassen Sie den Mindestschwellenwert für den Arbeitsspeicher an. Suchen Sie die Zeile
EARLYOOM_ARGS. Die-M <kbytes>Option legt die Mindestmenge an kostenlosem Arbeitsspeicher in KiB fest, dieearlyoombeizubehalten versucht. Der Standardwert ist-M 65536, was64 MiBentspricht.Erhöhen Sie diesen Wert für einen Masterknoten mit viel Arbeitsspeicher. Wenn Sie den Schwellenwert beispielsweise auf
1 GiB(1048576 KiB) setzen möchten, ändern Sie die Zeile so:EARLYOOM_ARGS="-r 15 -M 1048576 -s 1"Hinweise:
-r: Intervall für den Speicherbericht in Sekunden-s: Der Schwellenwert für den Auslagerungsspeicher, derearlyoomauslöst
Starten Sie den
earlyoom-Dienst neu, um die Änderungen anzuwenden:sudo systemctl restart earlyoom