Esta página fornece informações sobre erros de falta de memória (OOM) do Dataproc em VMs do Compute Engine e explica as etapas que podem ser realizadas para resolver esses erros.
Efeitos do erro 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 mestre e de worker congelam por um período.
Os erros de OOM de VMs mestre fazem com que os jobs falhem com erros de "tarefa não adquirida".
Os erros de OOM da VM do worker causam a perda do nó no YARN HDFS, o que atrasa a execução do job do Dataproc.
Controles de memória do YARN
O Apache YARN oferece os seguintes tipos de controles de memória:
- Com base em pesquisas (legado)
- Estrito
- Elastic
Por padrão, o Dataproc não define
yarn.nodemanager.resource.memory.enabled
para ativar os controles de memória do YARN pelos
seguintes motivos:
- O controle estrito de memória pode causar o encerramento de contêineres quando há memória suficiente se os tamanhos dos contêineres não estiverem configurados corretamente.
- Os requisitos de controle de memória elástica podem afetar negativamente a execução do job.
- Os controles de memória do YARN podem não impedir erros de OOM quando os processos consomem memória agressivamente.
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 encerra processos ou contêineres até que a condição de OOM seja removida.
O Dataproc oferece proteção de memória para os seguintes nós de cluster nas seguintes versões de imagem do Dataproc no Compute Engine:
Papel | 1.5 | 2.0 | 2.1 | 2.2 |
---|---|---|---|---|
VM mestre | 1.5.74+ | 2.0.48+ | todas | todas |
VM de worker | Não disponível | 2.0.76+ | 2.1.24+ | todas |
VM do pool de drivers | Não disponível | 2.0.76+ | 2.1.24+ | todas |
Identificar e confirmar encerramentos de proteção de memória
Use as informações a seguir para identificar e confirmar as interrupções de jobs devido à pressão de memória.
Encerramentos de processo
Os processos em que a proteção de memória do Dataproc encerra a saída com o código
137
ou143
.Quando o Dataproc encerra um processo devido à pressão de memória, as seguintes ações ou condições podem ocorrer:
- O Dataproc incrementa a
métrica cumulativa
dataproc.googleapis.com/node/problem_count
e define oreason
comoProcessKilledDueToMemoryPressure
. Consulte Coleta de métricas de recursos do Dataproc. - O Dataproc grava um registro
google.dataproc.oom-killer
com a mensagem:"A process is killed due to memory pressure: process name
. Para conferir essas mensagens, ative o Logging e use o seguinte filtro de registro: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 jobs do pool de nós mestre ou de driver
Quando um job de pool de nós de driver ou de nó mestre do Dataproc é encerrado devido à pressão da memória, ele falha com o código de erro
Driver received SIGTERM/SIGKILL signal and exited with INT
. Para conferir essas mensagens, ative o Logging e use o seguinte filtro de registro: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
registro
google.dataproc.oom-killer
ou odataproc.googleapis.com/node/problem_count
para confirmar se a proteção de memória do Dataproc encerrou o job. Consulte Encerramentos de processo.
Soluções:
- Se o cluster tiver um
pool de drivers,
aumente
driver-required-memory-mb
para o uso real de memória do job. - Se o cluster não tiver um pool de drivers, recrie o cluster, reduzindo o número máximo de jobs simultâneos em execução no cluster.
- Use um tipo de máquina de nó mestre com mais memória.
- Verifique o
registro
Encerramentos de contêineres do YARN no nó de worker
O Dataproc grava a seguinte mensagem no gerenciador de recursos do YARN:
container id exited with code EXIT_CODE
. Para conferir essas mensagens, ative a geração de registros e use o seguinte filtro de registro: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 contêiner sair com
code INT
, verifique o registrogoogle.dataproc.oom-killer
ou odataproc.googleapis.com/node/problem_count
para confirmar que a proteção de memória do Dataproc encerrou o job (consulte Encerramentos de processo).Soluções:
- Verifique se os tamanhos dos contêineres estão configurados corretamente.
- Considere diminuir
yarn.nodemanager.resource.memory-mb
. Essa propriedade controla a quantidade de memória usada para programar contêineres do YARN. - Se os contêineres de jobs falharem constantemente, verifique se a distorção de dados está causando um aumento no uso de contêineres específicos. Se sim, particione o job ou aumente o tamanho do worker para acomodar outros requisitos de memória.