Résoudre les erreurs de mémoire insuffisante de la VM

Cette page fournit des informations sur les erreurs de mémoire saturée (OOM, Out Of Memory) de Dataproc sur les VM Compute Engine, et explique les étapes à suivre pour résoudre ces erreurs.

Effets des erreurs OOM

Lorsque Dataproc sur les VM Compute Engine rencontre des erreurs de manque de mémoire (OOM), les effets incluent les conditions suivantes:

  • Les VM maître et de calcul se figent pendant un certain temps.

  • Les erreurs OOM des VM maîtres entraînent l'échec des tâches avec des erreurs de type "tâche non acquise".

  • Les erreurs OOM de la VM de calcul entraînent la perte du nœud sur HDFS YARN, ce qui retarde l'exécution des jobs Dataproc.

Commandes de mémoire YARN

Apache YARN fournit les types de contrôles de mémoire suivants:

  • Basé sur des sondages (ancien)
  • Strict
  • Elastic

Par défaut, Dataproc ne définit pas yarn.nodemanager.resource.memory.enabled pour activer les commandes de mémoire YARN, pour les raisons suivantes:

  • Un contrôle strict de la mémoire peut entraîner l'arrêt des conteneurs lorsqu'il y a suffisamment de mémoire si les tailles de conteneur ne sont pas configurées correctement.
  • Les exigences de contrôle de la mémoire Elastic peuvent avoir un impact négatif sur l'exécution des tâches.
  • Les contrôles de mémoire YARN peuvent ne pas empêcher les erreurs de mémoire insuffisante lorsque les processus consomment de manière agressive de la mémoire.

Protection de la mémoire Dataproc

Lorsqu'une VM de cluster Dataproc est soumise à une pression de mémoire, la protection de la mémoire Dataproc arrête les processus ou les conteneurs jusqu'à ce que la condition d'OOM soit supprimée.

Dataproc fournit une protection de la mémoire pour les nœuds de cluster suivants dans les versions d'image Dataproc sur Compute Engine suivantes:

Rôle 1,5 2.0 2.1 2.2
VM principale 1.5.74+ 2.0.48+ tous tous
VM de nœud de calcul Non disponible 2.0.76+ 2.1.24+ tous
VM Driver Pool Non disponible 2.0.76+ 2.1.24+ tous

Identifier et confirmer les terminaisons de la protection de la mémoire

Vous pouvez utiliser les informations suivantes pour identifier et confirmer les arrêts de tâches dus à une pression de mémoire.

Arrêts de processus

  • Les processus que la protection de la mémoire Dataproc arrête se terminent avec le code 137 ou 143.

  • Lorsque Dataproc arrête un processus en raison d'une pression de mémoire, les actions ou conditions suivantes peuvent se produire:

    • Dataproc incrémente la métrique cumulative dataproc.googleapis.com/node/problem_count et définit reason sur ProcessKilledDueToMemoryPressure. Consultez la section Collecte des métriques de ressources Dataproc.
    • Dataproc écrit un journal google.dataproc.oom-killer avec le message suivant : "A process is killed due to memory pressure: process name. Pour afficher ces messages, activez la journalisation, puis utilisez le filtre de journal suivant:
      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:"
      

Arrêt des tâches du nœud maître ou du pool de nœuds de pilote

  • Lorsqu'une tâche de nœud maître Dataproc ou de pool de nœuds de pilote se termine en raison d'une pression de mémoire, la tâche échoue avec le code d'erreur Driver received SIGTERM/SIGKILL signal and exited with INT. Pour afficher ces messages, activez la journalisation, puis utilisez le filtre de journal suivant:

    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"
        

    • Vérifiez le journal google.dataproc.oom-killer ou dataproc.googleapis.com/node/problem_count pour confirmer que la protection de la mémoire Dataproc a arrêté la tâche (voir Arrêts de processus).

    Solutions :

    • Si le cluster dispose d'un pool de pilotes, augmentez driver-required-memory-mb à l'utilisation réelle de la mémoire de l'ordre.
    • Si le cluster ne dispose pas d'un pool de pilotes, recréez-le en réduisant le nombre maximal de tâches simultanées exécutées sur le cluster.
    • Utilisez un type de machine de nœud maître avec une mémoire accrue.

Arrêts des conteneurs YARN du nœud de calcul

  • Dataproc écrit le message suivant dans le gestionnaire de ressources YARN: container id exited with code EXIT_CODE. Pour afficher ces messages, activez la journalisation, puis utilisez le filtre de journal suivant:

    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
    
  • Si un conteneur a quitté avec code INT, consultez le journal google.dataproc.oom-killer ou dataproc.googleapis.com/node/problem_count pour confirmer que la protection de la mémoire Dataproc a arrêté la tâche (voir Arrêts de processus).

    Solutions :

    • Vérifiez que les tailles des conteneurs sont correctement configurées.
    • Envisagez de baisser yarn.nodemanager.resource.memory-mb. Cette propriété contrôle la quantité de mémoire utilisée pour planifier les conteneurs YARN.
    • Si les conteneurs de tâches échouent de manière cohérente, vérifiez si un décalage des données entraîne une augmentation de l'utilisation de conteneurs spécifiques. Si tel est le cas, réorganisez la tâche ou augmentez la taille des nœuds de calcul pour répondre aux exigences de mémoire supplémentaires.