Risolvere i problemi di memoria insufficiente delle VM

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 (OOM), 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 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 sulla memoria.

Terminazioni dei processi

  • I processi terminati dalla protezione della memoria di Dataproc escono con il codice 137 o 143.

  • 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 imposta reason su ProcessKilledDueToMemoryPressure. 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:"
      

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 file dataproc.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.

Terminazioni dei container YARN dei nodi 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 log google.dataproc.oom-killer o dataproc.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 causa 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.