Fehler mit unzureichendem Arbeitsspeicher bei VM beheben

OOM-Effekte

Wenn bei Dataproc auf Compute Engine-VMs Fehler aufgrund des fehlenden Arbeitsspeichers auftreten:

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

  • OOM-Fehler bei Master-VMs führen dazu, dass Jobs mit dem Fehler „Aufgabe nicht übernommen“ fehlschlagen.

  • OOM-Fehler für Worker-VM verursachen einen Knotenverlust auf YARN-HDFS, wodurch die Ausführung von Dataproc-Jobs verzögert wird.

Einstellungen für Yarn-Speicher

Yarn bietet drei Arten von Speichersteuerelementen:

  1. Umfragebasiert (alt)
  2. Strikt
  3. Elastic

Standardmäßig legt Dataproc yarn.nodemanager.resource.memory.enabled aus den folgenden Gründen nicht fest, um die YARN-Arbeitsspeichersteuerung zu aktivieren:

  • Eine strikte Arbeitsspeichersteuerung kann dazu führen, dass Container beendet werden, wenn genügend Arbeitsspeicher vorhanden ist, wenn die Containergrößen nicht richtig konfiguriert sind.
  • Anforderungen an die elastische Arbeitsspeichersteuerung können sich negativ auf die Ausführung von Jobs auswirken.
  • YARN-Speichersteuerungen können OOM-Fehler nicht verhindern, wenn Prozesse übermäßig viel Arbeitsspeicher verbrauchen.

Dataproc-Speicherschutz

Wenn eine Dataproc-Cluster-VM unter Arbeitsspeicherauslastung steht, beendet der Dataproc-Speicherschutz Prozesse oder Container, bis die OOM-Bedingung entfernt wird.

Der Dataproc-Speicherschutz wird für die folgenden Clusterknoten in den folgenden Dataproc in Compute Engine-Image-Versionen bereitgestellt:

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

Beendigungen des Dataproc-Arbeitsspeicherschutzes identifizieren

  • Prozesse, bei denen der Dataproc-Speicherschutz den Exit mit dem Code 137 oder 143 beendet.
  • Beendigung von Worker-Knoten:
    • Dataproc erhöht den kumulativen Messwert dataproc.googleapis.com/node/problem_count und legt reason auf ProcessKilledDueToMemoryPressure fest.
    • Wenn Cloud Logging aktiviert ist, schreibt Dataproc ein google.dataproc.oom-killer-Log mit der Meldung: „A process is killed due to storage Memory: [Prozessname].“
    • Wenn ein YARN-Container beendet wird, schreibt Dataproc die folgende Nachricht in den YARN-Ressourcenmanager: „[Container-ID] wurde mit Code 137 beendet. Dies weist möglicherweise auf eine Speicherauslastung auf [Knoten-ID] hin.“
  • Beendigung des Master- oder Treiberpools: Der Jobtreiber schlägt mit Driver received SIGTERM/SIGKILL signal and exited with [INT] code fehl.

OOM-Lösungen

Dieser Abschnitt enthält Empfehlungen für die Beendigung von Jobs und Containern, die aus OOM-Problemen resultieren können.

Job schlägt mit folgender Fehlermeldung fehl: „Der Fahrer hat ein SIGTERM/SIGKILL-Signal empfangen und mit [INT]-Code beendet“.

Empfehlungen:

  • Wenn die Cluster einen Treiberpool haben, 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. Dabei wird die maximale Anzahl gleichzeitiger Jobs als (total master memory in MB - 3584MB) / driver-size-mb berechnet. Sie können diese Anzahl mit den folgenden Methoden senken:
    • dataproc:dataproc.scheduler.max-concurrent-jobs festlegen, oder
    • Sie legen für dataproc:dataproc.scheduler.driver-size-mb eine größere Zahl fest (der Standardwert ist 1024MB).
  • Erwägen Sie die Verwendung eines Master-Knoten-Maschinentyps mit zusätzlichem Arbeitsspeicher.

Container wurde mit Exit-Code 137 oder 143 beendet.

Empfehlungen:

  • Wenn der Dataproc-Arbeitsspeicherschutz den Container beendet hat (siehe Beendigung des Dataproc-Arbeitsspeicherschutzes ermitteln):

    • Prüfen Sie, ob die Containergrößen richtig konfiguriert sind.
    • Wir empfehlen, yarn.nodemanager.resource.memory-mb zu senken. Dieses Attribut steuert die Größe des Arbeitsspeichers, der für die Planung von YARN-Containern verwendet wird.
    • Wenn Jobcontainer regelmäßig fehlschlagen, prüfen Sie, ob eine Datenverzerrung zur erhöhten Nutzung bestimmter Container führt. Wenn ja, partitionieren Sie den Job neu oder erhöhen Sie die Worker-Größe, um den zusätzlichen Arbeitsspeicheranforderungen gerecht zu werden.