Recolección de volcados de memoria


Usa volcados de memoria para analizar las causas de una instancia de máquina virtual (VM) que no responde.

Para recopilar los volcados de memoria en Compute Engine, debes configurar las VM a fin de recibir un indicador de Interrupción no enmascarable (NMI) y, luego, ejecutar un comando de SendDiagnosticInterrupt para solicitar un error irrecuperable del kernel o pantalla azul en tu sistema operativo. La pantalla azul o el error irrecuperable del kernel inicia una recopilación de volcado de memoria por el sistema operativo invitado. Estos volcados principales se pueden usar para fines de depuración, especialmente en situaciones difíciles de reproducir, como la inmovilización del kernel.

Antes de comenzar

  • El envío de indicadores de NMI se cuenta en la cuota predeterminada de la API de consultas. Para obtener más información, consulta los límites de frecuencia de la API.
  • Si aún no lo hiciste, configura la autenticación. La autenticación es el proceso mediante el cual se verifica tu identidad para acceder a los servicios y las API de Google Cloud. Para ejecutar un código o muestras desde un entorno de desarrollo local, puedes autenticarte en Compute Engine de la siguiente manera.

    Selecciona la pestaña para saber cómo planeas usar las muestras en esta página:

    gcloud

    1. Instala Google Cloud CLI y, luego, inicializa la ejecución del siguiente comando:

      gcloud init
    2. Configura una región y una zona predeterminadas.

    REST

    Para usar las muestras de la API de REST en esta página en un entorno de desarrollo local, debes usar las credenciales que proporcionas a la CLI de gcloud.

      Instala Google Cloud CLI y, luego, inicializa la ejecución del siguiente comando:

      gcloud init

Funciones obligatorias

Para garantizar que tu usuario o cuenta de servicio tenga el permiso necesario para enviar señales NMI a una VM, pídele a tu administrador que otorgue a tu usuario o cuenta de servicio la siguiente función: Administrador de instancias de Compute (v1) (roles/compute.instanceAdmin.v1) en tu proyecto. Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso.

Este rol predefinido contiene el permiso compute.instances.sendDiagnosticInterrupt, que se requiere para enviar señales NMI a una VM.

Es posible que tu administrador también pueda otorgar este permiso a tu usuario o cuenta de servicio con roles personalizados o con otros roles predefinidos.

Descripción general

Si quieres usar volcados principales para ayudar a depurar una VM que no responde o a un problema de seguridad, debes completar los siguientes pasos:

  1. Configura tu VM para generar volcados de memoria
  2. Envía una señal NMI para generar volcados de memoria
  3. Revisa los volcados principales

Limitaciones

Para las VM que tienen habilitado el inicio seguro, debes inhabilitarlo antes de enviar una señal de interrupción de NMI. Para obtener instrucciones, consulta Modifica las opciones de VM protegida en una instancia de VM.

Configura la VM

La respuesta de una VM a la recepción de una señal de interrupción de NMI depende de la configuración del sistema operativo de la VM.

Cada sistema operativo escribe sus registros de volcado principales en una ubicación diferente. Por ejemplo, en los sistemas operativos Ubuntu, el archivo de volcado de falla se guarda en /var/crash/ de forma predeterminada.

Para configurar el SO invitado a fin de generar un volcado de falla cuando se recibe una señal NMI, revisa la documentación del sistema operativo compatible.

Sistema operativo Vínculos a las instrucciones Notas adicionales
Ubuntu Ubuntu: volcado de falla del kernel Para las VM de Linux, debes configurar el kernel a fin de que falle cuando reciba la señal de interrupción de NMI.

Para configurar el kernel a fin de que falle, agrega lo siguiente al archivo de configuración:

kernel.unknown_nmi_panic=1
SUSE Linux Enterprise Server (SLES) Configura la memoria de la falla del kernel para el análisis de volcado de memoria de kernel
Red Hat Enterprise Linux (RHEL) Usa los siguientes documentos:
Container-Optimized OS (COS) Habilita el volcado de falla de kernel en las instancias de GCE COS Solo COS 93 y las versiones posteriores admiten la generación de kdump mediante la señal NMI.
Windows Genera un kernel o volcado completo de fallas.

Las VMs de cliente de Windows no conservan los archivos de volcado de memoria, a menos que sean miembros de un dominio de AD o que se cumpla lo siguiente:

  • El registro establece AlwaysKeepMemoryDump en 1.
  • El disco tiene más de 25 GB de espacio libre.

Para obtener más información, consulta Almacenamiento de volcado de kernel y comportamiento de limpieza en Windows 7.

Envía NMI para generar volcados de núcleo

Después de configurar la VM, puedes enviar la señal NMI a la VM mediante Google Cloud CLI o REST.

gcloud

Para enviar la señal NMI, usa el comando instances send-diagnostic-interrupt.

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

Reemplaza lo siguiente:

  • VM_NAME: Es el ID de la instancia o el nombre de la VM desde la que deseas recopilar los volcados principales.
  • ZONE: La zona en la que se encuentra la VM.

El resultado es similar a este:

<Empty Response>

Para obtener una lista completa de los resultados, consulta la siguiente sección en este documento sobre “respuestas de comandos de NMI”.

REST

  1. Opcional. Si aún no está disponible, crea una clave de API. Si deseas obtener más información para crear claves de API, consulta Crea una clave de API.

  2. Para enviar la señal NMI, realiza una solicitud POST al método sendDiagnosticInterrupt.

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

    Por ejemplo, puedes usar el comando curl para realizar la solicitud de la siguiente manera:

    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
    

    Reemplaza lo siguiente:

    • PROJECT_ID: ID del proyecto en el que se creará la VM
    • ZONE: La zona en la que se encuentra la VM.
    • VM_NAME: Es el ID de la instancia o el nombre de la VM desde la que deseas recopilar los volcados principales.
    • API_KEY: Es tu clave de API.

    El resultado es similar a este:

    <Empty Response>

    Para obtener una lista completa de los resultados, consulta la siguiente sección de este documento sobre las “respuestas del comando de NMI”.

Respuestas del comando de NMI

Se muestra una de las siguientes respuestas cuando intentas enviar una señal NMI.

Estado Body Notas
LISTO <Empty Response> SUCCESS muestra que la señal NMI se entrega al sistema operativo. No garantiza que se recopile el volcado de memoria o que la VM se cierre o se reinicie. Estos comportamientos se determinan según la configuración del sistema operativo.
PÉSIMO. UNSUPPORTED_OPERATION Esto ocurre cuando el sistema operativo no recibe la señal de NMI. Hay varios motivos para esto. Los casos comunes son que la VM se está migrando en vivo o la VM no está configurada correctamente para recibir señales de NMI.
Para resolver esto, puedes probar lo siguiente:
  • Verifica que la VM esté configurada de forma correcta. Consulta Configura VM.
  • Espera y vuelve a intentar la solicitud SendDiagnosticInterrupt.
PÉSIMO. Required 'compute.instances.sendDiagnosticInterrupt' permission for [..] El comando falló porque el usuario que realiza la solicitud no tiene permisos suficientes.

Para resolver esto, puedes asignar un rol al usuario que contenga el permiso compute.instances.sendDiagnosticInterrupt.

Revisa los volcados de memoria

Revisa el archivo de volcado de falla en la ubicación configurada o predeterminada para tu sistema operativo.

Por ejemplo, en los sistemas operativos Ubuntu, de forma predeterminada, el archivo de volcado de falla se guarda en /var/crash/.