Esta página fornece informações sobre erros de memória insuficiente (OOM) do Dataproc na VM do Compute Engine e explica os passos que pode seguir para resolver problemas de OOM.
Efeitos dos erros de OOM
Quando o Dataproc em VMs do Compute Engine encontra erros de falta de memória (OOM), os efeitos incluem as seguintes condições:
As VMs principais e de trabalho ficam bloqueadas durante um período.
Os erros de falta de memória (OOM) das VMs principais fazem com que as tarefas falhem com erros "task not acquired" (tarefa não adquirida).
Os erros de falta de memória (OOM) da VM do trabalhador causam uma perda do nó no HDFS do YARN, o que atrasa a execução da tarefa do Dataproc.
Controlos de memória do YARN
O Apache YARN oferece os seguintes tipos de controlos de memória:
- Com base em sondagens (antigo)
- Rigoroso
- Elastic
Por predefinição, o Dataproc não define
yarn.nodemanager.resource.memory.enabled
para ativar os controlos de memória do YARN pelos
seguintes motivos:
- O controlo rigoroso da memória pode causar a terminação de contentores quando existe memória suficiente se os tamanhos dos contentores não estiverem configurados corretamente.
- Os requisitos de controlo de memória elástica podem afetar negativamente a execução de tarefas.
- Os controlos de memória do YARN podem não impedir erros de falta de memória quando os processos consomem memória de forma agressiva.
Proteção de memória do Dataproc
Quando uma VM de cluster do Dataproc está sob pressão de memória, a proteção de memória do Dataproc termina os processos ou os contentores até que a condição de falta de memória seja removida.
O Dataproc oferece proteção de memória para os seguintes nós do cluster nas seguintes versões de imagens do Dataproc no Compute Engine:
Função | 1,5 | 2,0 | 2.1 | 2.2 |
---|---|---|---|---|
VM principal | 1.5.74+ | 2.0.48+ | todos | todos |
VM trabalhadora | Não disponível | 2.0.76+ | 2.1.24+ | todos |
VM do conjunto de controladores | Não disponível | 2.0.76+ | 2.1.24+ | todos |
Identifique e confirme as terminações da proteção de memória
Pode usar as seguintes informações para identificar e confirmar terminações de tarefas devido à pressão da memória.
Encerramentos de processos
Os processos que a proteção de memória do Dataproc termina saem com o código
137
ou143
.Quando o Dataproc termina um processo devido à pressão da memória, podem ocorrer as seguintes ações ou condições:
- O Dataproc incrementa a métrica cumulativa
dataproc.googleapis.com/node/problem_count
e definereason
comoProcessKilledDueToMemoryPressure
. Consulte o artigo Recolha de métricas de recursos do Dataproc. - O Dataproc escreve um registo
google.dataproc.oom-killer
com a mensagem:"A process is killed due to memory pressure: process name
. Para ver estas mensagens, ative o Registo e, em seguida, use o seguinte filtro de registo: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:"
- O Dataproc incrementa a métrica cumulativa
Encerramentos de tarefas de node pool de nó principal ou de controlador
Quando um nó principal ou uma tarefa do conjunto de nós do controlador do Dataproc termina devido à pressão da memória, a tarefa falha com o código de erro
Driver received SIGTERM/SIGKILL signal and exited with INT
. Para ver estas mensagens, ative o Registo e, em seguida, use o seguinte filtro de registo: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"
- Verifique o registo
google.dataproc.oom-killer
ou odataproc.googleapis.com/node/problem_count
para confirmar que a proteção de memória do Dataproc terminou a tarefa (consulte Terminações de processos).
Soluções:
- Se o cluster tiver um
conjunto de controladores,
aumente
driver-required-memory-mb
para a utilização de memória real da tarefa. - Se o cluster não tiver um conjunto de controladores, recrie o cluster, reduzindo o número máximo de tarefas simultâneas em execução no cluster.
- Use um tipo de máquina de nó principal com memória aumentada.
- Verifique o registo
Encerramentos de contentores YARN de nós trabalhadores
O Dataproc escreve a seguinte mensagem no gestor de recursos do YARN:
container id exited with code EXIT_CODE
. Para ver estas mensagens, ative o registo e, em seguida, use o seguinte filtro de registo: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 um contentor tiver sido terminado com
code INT
, verifique o registogoogle.dataproc.oom-killer
ou odataproc.googleapis.com/node/problem_count
para confirmar que a proteção de memória do Dataproc terminou a tarefa (consulte Terminações de processos).Soluções:
- Verifique se os tamanhos dos contentores estão configurados corretamente.
- Considere baixar
yarn.nodemanager.resource.memory-mb
. Esta propriedade controla a quantidade de memória usada para agendar contentores YARN. - Se os contentores de tarefas falharem consistentemente, verifique se a distorção de dados está a causar um aumento da utilização de contentores específicos. Se for o caso, reparticione a tarefa ou aumente o tamanho do trabalhador para satisfazer os requisitos de memória adicionais.