Questa pagina fornisce informazioni sugli errori di esaurimento della memoria (OOM) della VM Compute Engine di Dataproc e spiega i passaggi che puoi eseguire per risolvere i problemi e risolvere gli errori OOM.
Effetti dell'errore OOM
Quando le VM Compute Engine di Dataproc riscontrano errori di esaurimento della memoria (OOM), gli effetti includono le seguenti condizioni:
Le VM master e worker si bloccano per un periodo di tempo.
Gli errori OOM delle VM master causano l'esito negativo dei job con errori "task not acquired" (attività non acquisita).
Gli errori OOM della VM worker causano la perdita del nodo su YARN HDFS, il che ritarda l'esecuzione del job Dataproc.
Controlli della memoria YARN
Apache YARN fornisce i seguenti tipi di controlli della memoria:
- Basato su sondaggi (legacy)
- Restrittiva
- Elastic
Per impostazione predefinita, Dataproc non imposta
yarn.nodemanager.resource.memory.enabled
per attivare i controlli della memoria YARN, per
i seguenti motivi:
- Il controllo rigoroso della memoria può causare la terminazione dei container quando la 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 potrebbero non riuscire a impedire errori di esaurimento della memoria quando i processi consumano memoria in modo aggressivo.
Protezione della memoria di Dataproc
Quando una VM del cluster Dataproc è sotto pressione della memoria, la protezione della memoria di Dataproc termina i processi o i container finché la condizione OOM non viene rimossa.
Dataproc fornisce la 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 master | 1.5.74+ | 2.0.48+ | tutti | tutti |
VM worker | Non disponibile | 2.0.76+ | 2.1.24+ | tutti |
VM del pool di driver | Non disponibile | 2.0.76+ | 2.1.24+ | tutti |
Identificare e confermare le interruzioni della protezione della memoria
Puoi utilizzare le seguenti informazioni per identificare e confermare le interruzioni dei job dovute alla 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 dell'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 sezione 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, attiva la registrazione, quindi utilizza il seguente filtro dei 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
Chiusure di job del pool di nodi master o driver
Quando un job del pool di nodi master o driver Dataproc termina a causa di un'eccessiva pressione sulla memoria, il job non va a buon fine e viene visualizzato il codice di errore
Driver received SIGTERM/SIGKILL signal and exited with INT
. Per visualizzare questi messaggi, attiva la registrazione, quindi utilizza il seguente filtro dei 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
odataproc.googleapis.com/node/problem_count
per verificare che la protezione della memoria di Dataproc abbia terminato il job (vedi Terminazioni dei processi).
Soluzioni:
- Se il cluster ha un
pool di driver,
aumenta
driver-required-memory-mb
all'utilizzo effettivo della memoria del job. - Se il cluster non ha un pool di driver, ricrealo riducendo il numero massimo di job simultanei in esecuzione sul cluster.
- Utilizza un tipo di macchina del nodo master con maggiore memoria.
- Controlla il log
Terminazioni dei container YARN dei nodi worker
Dataproc scrive il seguente messaggio nel resource manager YARN:
container id exited with code EXIT_CODE
. Per visualizzare questi messaggi, attiva la registrazione, poi utilizza il seguente filtro dei 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 container è 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 dei contenitori 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 container dei job non riescono costantemente, verifica se la distorsione dei dati sta causando un maggiore utilizzo di container specifici. In questo caso, esegui nuovamente il partizionamento del job o aumenta le dimensioni del worker per soddisfare i requisiti di memoria aggiuntivi.