Risolvi gli errori di esaurimento della memoria delle VM

Effetti OOM

Quando le VM di Dataproc su Compute Engine riscontrano errori di esaurimento della memoria:

  • Le VM master e worker si bloccano per un determinato periodo di tempo.

  • Gli errori OOM delle VM master causano la mancata riuscita dei job con l'errore "Attività non acquisita".

  • Gli errori OOM della VM worker causano una perdita del nodo su YARN HDFS, con un conseguente ritardo nell'esecuzione del job Dataproc.

Controlli di memoria

Yarn offre tre tipi di controlli della memoria:

  1. Basata su polling (legacy)
  2. Restrittiva
  3. Elastic

Per impostazione predefinita, Dataproc non imposta yarn.nodemanager.resource.memory.enabled su per abilitare i controlli della memoria YARN, per i seguenti motivi:

  • Un controllo rigoroso della memoria può causare la terminazione dei container quando è disponibile memoria sufficiente se le dimensioni dei container non sono configurate correttamente.
  • I requisiti di controllo della memoria elastica possono influire negativamente sull'esecuzione del job.
  • I controlli della memoria YARN possono non riuscire a prevenire gli errori OOM quando i processi consumano memoria in modo aggressivo.

Protezione della memoria Dataproc

Quando la VM di un cluster Dataproc è sotto pressione, la protezione della memoria di Dataproc termina i processi o i container fino a quando la condizione OOM non viene rimossa.

La protezione della memoria di Dataproc è fornita per i seguenti nodi cluster nelle seguenti versioni immagine di Dataproc su Compute Engine:

Ruolo 1.5 2.0 2.1
VM master 1.5.74+ 2.0.48+ tutte
VM worker Non disponibile 2.0.76+ 2.1.24+
VM del pool di driver Non disponibile 2.0.76+ 2.1.24+

Come identificare le terminazioni della protezione della memoria di Dataproc

  • Processi che la protezione della memoria di Dataproc termina l'uscita con il codice 137 o 143.
  • Terminazione del nodo worker:
    • Dataproc incrementa la metrica cumulativa dataproc.googleapis.com/node/problem_count e imposta reason su ProcessKilledDueToMemoryPressure.
    • Se Cloud Logging è abilitato, Dataproc scrive un log google.dataproc.oom-killer con il messaggio "Un processo è stato interrotto a causa della pressione della memoria: [nome del processo]".
    • Se un container YARN viene terminato, Dataproc scrive il seguente messaggio in Resource Manager YARN: "[ID container] è uscito con il codice 137, il che potenzialmente indica una pressione della memoria su [node id]".
  • Terminazione del nodo del pool di driver o master: il driver del job ha esito negativo con Driver received SIGTERM/SIGKILL signal and exited with [INT] code.

Soluzioni OOM

Questa sezione offre suggerimenti per le terminazioni di job e container che possono essere causate da problemi OOM.

Il job non funziona con il messaggio "Il conducente ha ricevuto il segnale SIGTERM/SIGKILL ed è uscito con il codice [INT]"

Consigli:

  • Se i cluster hanno un pool di driver, aumenta driver-required-memory-mb fino all'utilizzo della memoria del job attuale.
  • Se il cluster non ha un pool di driver, ricrealo, riducendo il numero massimo di job simultanei, calcolato come (total master memory in MB - 3584MB) / driver-size-mb. Puoi ridurre questo numero di:
    • Impostazione di dataproc:dataproc.scheduler.max-concurrent-jobs o
    • Imposto dataproc:dataproc.scheduler.driver-size-mb su un numero maggiore (il valore predefinito è 1024MB).
  • Valuta l'utilizzo di un tipo di macchina del nodo master con memoria aggiuntiva.

Contenitore uscito con il codice di uscita 137 o 143

Consigli:

  • Se la protezione della memoria di Dataproc ha terminato il container (vedi Come identificare le terminazioni della protezione della memoria di Dataproc):

    • Verifica che le dimensioni del contenitore siano configurate correttamente.
    • Valuta la possibilità di ridurre yarn.nodemanager.resource.memory-mb. Questa proprietà controlla la quantità di memoria utilizzata per pianificare i container YARN.
    • Se i container di job non riescono ad andare a buon fine, verifica se il disallineamento dei dati sta causando un maggiore utilizzo di container specifici. In tal caso, ripartiziona il job o aumenta la dimensione del worker per soddisfare requisiti di memoria aggiuntivi.