Analyser l'utilisation de la mémoire de tas de l'opérateur Kubernetes AlloyDB Omni

Ce document explique comment obtenir un instantané de la pile de mémoire de l'opérateur AlloyDB Omni pour vous aider à diagnostiquer et à déboguer d'éventuels problèmes de mémoire. Pour obtenir un tas de mémoire à des fins d'analyse, procédez comme suit:

  1. Déterminez le déploiement de l'opérateur AlloyDB Omni à analyser. L'opérateur AlloyDB Omni inclut deux déploiements, et vous pouvez analyser la pile de mémoire pour l'un ou l'autre. Pour identifier les deux déploiements, exécutez la commande suivante:

    kubectl get deployment -n alloydb-omni-system

    La sortie affiche les deux déploiements dans l'espace de noms alloydb-omni-system:

    • fleet-controller-manager
    • local-controller-manager

    Vous pouvez obtenir le tas de mémoire de l'un ou l'autre déploiement. À des fins de démonstration, ces étapes montrent comment obtenir le tas de mémoire pour le déploiement local-controller-manager.

  2. Activez l'analyse de la mémoire en spécifiant un port disponible à utiliser. Une fois le port spécifié, le pod redémarre. Pour spécifier un port disponible, utilisez l'argument pprof-address dans le déploiement:

    1. Ouvrez le déploiement dans un éditeur de texte en exécutant la commande suivante:

      kubectl edit -n alloydb-omni-system deploy local-controller-manager
    2. Spécifiez le port dans le args de la section container du modèle spec:

      apiVersion: apps/v1
      kind: Deployment
      spec:
        ...
        template:
        ...
          spec:
            containers:
            - args
              - --pprof-address=:PORT
      
    3. Enregistrez le fichier de déploiement. Une fois le fichier de déploiement enregistré, le pod redémarre.

  3. Attendez que le pod redémarre avant de passer à l'étape suivante.

    Pour vous assurer que le pod a redémarré, exécutez la commande suivante:

    kubectl get pod -n alloydb-omni-system

    Vérifiez que la valeur de sortie de la colonne STATUS du pod est Running et que la valeur de sortie de sa colonne AGE est une durée courte. Par exemple, si la colonne STATUS est Running et que la valeur de la colonne AGE est 50s, le pod s'exécute depuis 50 secondes après le redémarrage.

  4. Activez le transfert de port à l'aide de la commande suivante:

    kubectl port-forward -n alloydb-omni-system DEPLOYMENT_POD_NAME PORT:PORT

    Remplacez DEPLOYMENT_POD_NAME par le nom de votre déploiement tel qu'il apparaît dans la colonne NAME du résultat de la commande suivante:

    kubectl get pod -n alloydb-omni-system
  5. Dans un autre terminal, exécutez la commande suivante pour créer un fichier contenant un instantané de la pile de mémoire du déploiement:

    curl http://localhost:PORT/debug/pprof/heap > heap.out
  6. Enregistrez le fichier heap.out et utilisez-le pour afficher la pile de mémoire du déploiement de l'opérateur AlloyDB Omni que vous avez choisi d'analyser.

  7. Désactivez l'analyse de la mémoire en supprimant l'argument pprof-address avec le port que vous avez utilisé du déploiement:

    1. Ouvrez le déploiement dans un éditeur de texte:

      kubectl edit -n alloydb-omni-system deploy local-controller-manager
    2. Supprimez la ligne de port --pprof-address=:PORT de la section args de la section container du modèle spec que vous avez ajoutée précédemment.

Étape suivante