Risolvere i problemi di memoria insufficiente delle VM

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 o 143.

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

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 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:

    • 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.

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