Questa pagina fornisce informazioni sugli errori di OOM (out-of-memory) di Dataproc su VM Compute Engine e spiega i passaggi da seguire per individuare e risolvere gli errori OOM.
Effetti degli errori OOM
Quando Dataproc sulle VM Compute Engine riscontra errori di esaurimento della memoria, gli effetti includono le seguenti condizioni:
Le VM master e worker si bloccano per un determinato periodo di tempo.
Gli errori OOM delle VM master causano l'interruzione dei job con errori "task not acquired" (Attività non acquisita).
Gli errori OOM della VM del worker causano una perdita del nodo su YARN HDFS, il che ritarda l'esecuzione dei job Dataproc.
Controlli della memoria YARN
Apache YARN fornisce i seguenti tipi di controlli della memoria:
- In base a sondaggi (legacy)
- Restrittiva
- Elastic
Per impostazione predefinita, Dataproc non imposta
yarn.nodemanager.resource.memory.enabled
per abilitare i controlli della memoria YARN, per
i seguenti motivi:
- Il controllo della memoria rigoroso può causare l'interruzione dei contenitori anche se è disponibile memoria sufficiente se le dimensioni dei contenitori non sono configurate correttamente.
- I requisiti di controllo della memoria elastica possono influire negativamente sull'esecuzione dei job.
- I controlli della memoria YARN possono non riuscire a impedire errori OOM quando i processi consumano in modo aggressivo la memoria.
Protezione della memoria di Dataproc
Quando una VM del cluster Dataproc è sotto pressione di memoria, la protezione della memoria di Dataproc termina i processi o i contenitori finché la condizione OOM non viene rimossa.
Dataproc fornisce protezione della memoria per i seguenti nodi del cluster nelle seguenti versioni immagine di Dataproc su Compute Engine:
Ruolo | 1,5 | 2.0 | 2.1 | 2.2 |
---|---|---|---|---|
VM principale | 1.5.74+ | 2.0.48+ | tutte | tutte |
VM worker | Non disponibile | 2.0.76+ | 2.1.24+ | tutte |
VM pool di driver | Non disponibile | 2.0.76+ | 2.1.24+ | tutte |
Identificare e confermare le interruzioni della protezione della memoria
Puoi utilizzare le seguenti informazioni per identificare e confermare la terminazione dei job a causa della pressione della memoria.
Terminazioni dei processi
I processi terminati dalla protezione della memoria di Dataproc escono con il codice
137
o143
.Quando Dataproc termina un processo a causa di un utilizzo intensivo della memoria, possono verificarsi le seguenti azioni o condizioni:
- Dataproc incrementa la metrica cumulativa
dataproc.googleapis.com/node/problem_count
e impostareason
suProcessKilledDueToMemoryPressure
. Consulta la raccolta delle metriche delle risorse Dataproc. - Dataproc scrive un log
google.dataproc.oom-killer
con il messaggio:"A process is killed due to memory pressure: process name
. Per visualizzare questi messaggi, abilita il logging e utilizza il seguente filtro di log: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 incrementa la metrica cumulativa
Terminazioni dei job del pool di nodi master o del pool di nodi driver
Quando un job del pool di nodi master o del nodo driver di Dataproc termina a causa di una pressione sulla memoria, il job non va a buon fine con il codice di errore
Driver received SIGTERM/SIGKILL signal and exited with INT
. Per visualizzare questi messaggi, abilita il logging e utilizza il seguente filtro di log: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"
- Controlla il log
google.dataproc.oom-killer
o il filedataproc.googleapis.com/node/problem_count
per verificare che la Protezione della memoria Dataproc abbia terminato il job (vedi Terminazioni dei processi).
Soluzioni:
- Se il cluster ha un
pool di driver,
aumenta
driver-required-memory-mb
in base all'utilizzo effettivo della memoria del job. - Se il cluster non ha un pool di driver, ricrea il cluster riducendo il numero massimo di job simultanei in esecuzione sul cluster.
- Utilizza un tipo di macchina del nodo master con una maggiore quantità di memoria.
- Controlla il log
Terminazioni dei container YARN del nodo worker
Dataproc scrive il seguente messaggio nel gestore delle risorse YARN:
container id exited with code EXIT_CODE
. Per visualizzare questi messaggi, attiva la registrazione, quindi utilizza il seguente filtro log: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
Se un contenitore è uscito con
code INT
, controlla il loggoogle.dataproc.oom-killer
odataproc.googleapis.com/node/problem_count
per verificare che la Protezione della memoria di Dataproc abbia terminato il job (vedi Terminazioni dei processi).Soluzioni:
- Verifica che le dimensioni del contenitore siano configurate correttamente.
- Valuta la possibilità di abbassare
yarn.nodemanager.resource.memory-mb
. Questa proprietà controlla la quantità di memoria utilizzata per la pianificazione dei container YARN. - Se i contenitori dei job non riescono sempre, controlla se la distorsione dei dati sta causando un aumento dell'utilizzo di contenitori specifici. In questo caso, ripartisci il job o aumenta le dimensioni del worker per soddisfare i requisiti di memoria aggiuntivi.