Collecter des fichiers de vidage de mémoire


Utilisez les fichiers de vidage de mémoire afin d'analyser les causes pour lesquelles une instance de machine virtuelle (VM) ne répond pas.

Pour collecter les fichiers de vidage de mémoire sur Compute Engine, vous devez configurer vos VM afin de recevoir un signal d'interruption non masquable (NMI), puis exécuter une commande SendDiagnosticInterrupt pour afficher une invite panique du noyau ou écran bleu dans votre système d'exploitation. Une panique du noyau ou un écran bleu lance une collecte de fichiers de vidage de mémoire via le système d'exploitation invité. Ces fichiers de vidage de mémoire peuvent ensuite être utilisés à des fins de débogage, en particulier dans les scénarios difficiles à reproduire, tels qu'un gel de noyau.

Avant de commencer

  • L'envoi de signaux NMI est comptabilisé dans le quota de l'API Queries par défaut. Pour en savoir plus, consultez la page Limites relatives à l'API.
  • Si ce n'est pas déjà fait, configurez l'authentification. L'authentification est le processus permettant de valider votre identité pour accéder aux services et aux API Google Cloud. Pour exécuter du code ou des exemples depuis un environnement de développement local, vous pouvez vous authentifier auprès de Compute Engine comme suit :

    Sélectionnez l'onglet correspondant à la façon dont vous prévoyez d'utiliser les exemples de cette page :

    gcloud

    1. Installez Google Cloud CLI, puis initialisez-la en exécutant la commande suivante :

      gcloud init
    2. Définissez une région et une zone par défaut.

    REST

    Pour utiliser les exemples d'API REST de cette page dans un environnement de développement local, vous devez utiliser les identifiants que vous fournissez à gcloud CLI.

      Installez Google Cloud CLI, puis initialisez-la en exécutant la commande suivante :

      gcloud init

Rôles requis

Pour vous assurer que votre utilisateur ou votre compte de service dispose de l'autorisation nécessaire pour envoyer des signaux NMI à une VM, demandez à votre administrateur d'accorder à cet utilisateur ou compte de service le rôle IAM Administrateur d'instances Compute (v1) (roles/compute.instanceAdmin.v1) sur votre projet. Pour en savoir plus sur l'attribution de rôles, consultez la section Gérer les accès.

Ce rôle prédéfini contient l'autorisation compute.instances.sendDiagnosticInterrupt, qui est nécessaire pour envoyer des signaux NMI à une VM.

Votre administrateur peut également attribuer cette autorisation à votre utilisateur ou votre compte de service avec des rôles personnalisés ou d'autres rôles prédéfinis.

Présentation

Pour utiliser des fichiers de vidage de mémoire afin de faciliter le débogage d'une VM qui ne répond pas ou d'un problème de sécurité, procédez comme suit :

  1. Configurez votre VM pour générer des fichiers de vidage de mémoire.
  2. Envoyez un signal NMI pour générer des fichiers de vidage de mémoire.
  3. Examinez les fichiers de vidage de mémoire.

Limites

Pour les VM sur lesquelles le démarrage sécurisé est activé, vous devez le désactiver avant d'envoyer un signal d'interruption NMI. Pour obtenir des instructions, consultez la page Modifier les options de VM protégée sur une instance de VM.

Configurer la VM

La réponse d'une VM à la réception d'un signal d'interruption NMI dépend de la configuration du système d'exploitation de la VM.

Chaque système d'exploitation écrit ses journaux de vidage de mémoire dans un emplacement différent. Par exemple, dans les systèmes d'exploitation Ubuntu, le fichier de vidage sur incident est enregistré par défaut dans /var/crash/.

Pour configurer votre système d'exploitation invité afin de générer un fichier de vidage sur incident lorsqu'un signal NMI est reçu, consultez la documentation du système d'exploitation compatible.

Système d'exploitation Liens vers les instructions Remarques supplémentaires
Ubuntu Ubuntu : vidage sur plantage du noyau Pour les VM Linux, vous devez configurer le noyau pour qu'il plante lorsqu'il reçoit le signal d'interruption NMI.

Pour configurer le noyau afin qu'il plante, ajoutez les éléments suivants à votre fichier de configuration :

kernel.unknown_nmi_panic=1
SUSE Linux Enterprise Server (SLES) Configurez la mémoire de Crashkernel pour l'analyse des fichiers de vidage de mémoire du noyau.
Red Hat Enterprise Linux (RHEL) Utilisez les deux documents suivants :
Container-Optimized OS (COS) Activer le vidage sur plantage du noyau sur les instances GCE COS Seuls les versions COS 93 et ultérieures sont compatibles avec la génération de kdump à l'aide du signal NMI.
Windows Générer un noyau ou effectuer un vidage sur plantage

Les VM clientes Windows ne conservent pas les fichiers de dump mémoire, sauf s'ils sont membres d'un domaine AD ou si les conditions suivantes sont remplies :

  • Le registre définit AlwaysKeepMemoryDump sur 1.
  • Le disque dispose d'au moins 25 Go d'espace libre.

Pour en savoir plus, consultez la page Stockage du vidage du noyau et comportement de nettoyage dans Windows 7.

Envoyer le signal NMI pour générer des fichiers de vidage de mémoire

Après avoir configuré la VM, vous pouvez envoyer le signal NMI à la VM à l'aide de Google Cloud CLI ou de REST.

gcloud

Pour envoyer le signal NMI, utilisez la commande instances send-diagnostic-interrupt.

gcloud compute instances send-diagnostic-interrupt VM_NAME \
    --zone=ZONE

Remplacez les éléments suivants :

  • VM_NAME : ID d'instance ou nom de la VM à partir duquel vous souhaitez collecter les fichiers de vidage de mémoire.
  • ZONE : zone où se trouve votre VM.

Le résultat ressemble à ce qui suit :

<Empty Response>

Pour obtenir la liste complète des résultats, consultez la section suivante de ce document concernant les "réponses de la commande NMI".

REST

  1. Facultatif. Si ce n'est pas déjà fait, créez une clé API. Pour en savoir plus sur la création de clés API, consultez la page Créer une clé API.

  2. Pour envoyer le signal NMI, envoyez une requête POST à la méthode sendDiagnosticInterrupt.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/sendDiagnosticInterrupt?key=API_KEY
    

    Par exemple, vous pouvez utiliser la commande curl pour envoyer la requête comme suit :

    curl --request POST 'https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/sendDiagnosticInterrupt?key=API_KEY' \
      --header 'Authorization: Bearer $(gcloud auth print-access-token)' \
      --header 'Accept: application/json' \
      --compressed
    

    Remplacez les éléments suivants :

    • PROJECT_ID : ID du projet dans lequel créer la VM
    • ZONE : zone où se trouve votre VM.
    • VM_NAME : ID d'instance ou nom de la VM à partir duquel vous souhaitez collecter les fichiers de vidage de mémoire.
    • API_KEY : votre clé API.

    Le résultat ressemble à ce qui suit :

    <Empty Response>

    Pour obtenir la liste complète des résultats, consultez la section suivante de ce document concernant les "réponses de la commande NMI".

Réponses de la commande NMI

L'une des réponses suivantes est renvoyée lorsque vous tentez d'envoyer un signal NMI.

État Body Remarques
SUCCESS <Empty Response> SUCCESS indique que le signal NMI est transmis au système d'exploitation. Cela ne garantit pas que les fichiers de vidage de mémoire sont collectés, ni que la VM s'arrête ou redémarre. Ces comportements sont déterminés par la configuration du système d'exploitation.
FAIL UNSUPPORTED_OPERATION Cette erreur se produit lorsque le système d'exploitation ne reçoit pas le signal NMI. Il existe plusieurs raisons à cela. Il est courant que la VM soit migrée à chaud ou qu'elle ne soit pas correctement configurée pour recevoir des signaux NMI.
Pour résoudre ce problème, vous pouvez essayer les solutions suivantes :
  • Vérifiez que la VM est correctement configurée. Consultez la section Configurer la VM.
  • Attendez et réessayez d'envoyer la requête SendDiagnosticInterrupt.
FAIL Required 'compute.instances.sendDiagnosticInterrupt' permission for [..] La commande a échoué, car l'utilisateur qui envoie la requête ne dispose pas des autorisations suffisantes.

Pour résoudre ce problème, vous pouvez attribuer un rôle à l'utilisateur qui comprend l'autorisation compute.instances.sendDiagnosticInterrupt.

Examiner les fichiers de vidage de mémoire

Examinez le fichier de vidage sur incident à l'emplacement configuré ou par défaut de votre système d'exploitation.

Par exemple, dans les systèmes d'exploitation Ubuntu, le fichier de vidage sur incident est enregistré par défaut dans /var/crash/.