

# Enviar una interrupción de diagnóstico para depurar una instancia de Amazon EC2 inaccesible
<a name="diagnostic-interrupt"></a>

**aviso**  
Las interrupciones de diagnóstico están destinadas a ser utilizadas por usuarios avanzados. El uso incorrecto podría afectar negativamente a su instancia. El envío de una interrupción de diagnóstico a una instancia podría desencadenar que una instancia se bloquee y reinicie, lo que podría provocar la pérdida de datos.

Puede enviar una interrupción de diagnóstico a una instancia inaccesible o que no responde para activar un *pánico de kernel* (en instancias de Linux) o un *error de parada* (denominado comúnmente *error de pantalla azul*) en instancias de Windows.

**Instancias de Linux**  
Los sistemas operativos Linux normalmente se bloquean y se reinician cuando se produce un pánico de kernel. El comportamiento específico del sistema operativo depende de su configuración. Un pánico de kernel también se puede utilizar para hacer que el kernel del sistema operativo de la instancia realice tareas como, por ejemplo, generar un archivo de volcado de bloqueo. A continuación, puede utilizar la información del archivo de volcado de bloqueo para realizar un análisis de causa raíz y depurar la instancia. El sistema operativo genera los datos de volcado de memoria localmente en la propia instancia.

**instancias de Windows**  
En general, los sistemas operativos Windows se bloquean y reinician cuando se produce un error de parada, pero el comportamiento específico depende de su configuración. Un error de parada también puede hacer que el sistema operativo escriba información de depuración de errores como, por ejemplo, un volcado de memoria de kernel, en un archivo. A continuación, puede utilizar esta información para llevar a cabo un análisis de causa raíz para depurar la instancia. El sistema operativo genera los datos de volcado de memoria localmente en la propia instancia.

Antes de enviar una interrupción de diagnóstico a la instancia, le recomendamos que consulte la documentación del sistema operativo y, a continuación, realice los cambios de configuración necesarios.

**Topics**
+ [Tipos de instancias admitidas](#diagnostic-interrupt-instances)
+ [Requisitos previos](#diagnostic-interrupt-prereqs)
+ [Enviar una interrupción de diagnóstico](#diagnostic-interrupt-use)

## Tipos de instancias admitidas
<a name="diagnostic-interrupt-instances"></a>

La interrupción de diagnóstico es compatible con todos los tipos de instancias basadas en Nitro, a excepción de los que funcionan con procesadores Graviton de AWS. Para obtener más información, consulte [las instancias integradas en el AWS Nitro System](https://docs.aws.amazon.com/ec2/latest/instancetypes/ec2-nitro-instances.html) y [AWS Graviton](https://aws.amazon.com/ec2/graviton/).

## Requisitos previos
<a name="diagnostic-interrupt-prereqs"></a>

Antes de utilizar una interrupción de diagnóstico, debe configurar el sistema operativo de la instancia. Esto garantiza que realice las acciones que necesita cuando se produce un pánico de kernel (instancias de Linux) o un error de parada (instancias de Windows).

### Instancias de Linux
<a name="diagnostic-interrupt-prereqs-linux"></a>

**Para configurar Amazon Linux 2 o Amazon Linux 2023 para generar un volcado de bloqueo cuando se produce un pánico de kernel**

1. Conéctese a la instancia.

1. Instale **kexec** y **kdump**.

   ```
   [ec2-user ~]$ sudo yum install kexec-tools -y
   ```

1. Configure el kernel para reservar una cantidad de memoria adecuada para el kernel secundario. La cantidad de memoria que reservar depende de la memoria total disponible de la instancia. Abra el archivo `/etc/default/grub` utilizando su editor de texto preferido, localice la línea que comienza por `GRUB_CMDLINE_LINUX_DEFAULT` y, a continuación, añada el parámetro `crashkernel` con el formato siguiente: `crashkernel=memory_to_reserve`. Por ejemplo, para reservar `256MB`, modifique el archivo `grub` como se indica a continuación:

   ```
   GRUB_CMDLINE_LINUX_DEFAULT="crashkernel=256M console=tty0 console=ttyS0,115200n8 net.ifnames=0 biosdevname=0 nvme_core.io_timeout=4294967295 rd.emergency=poweroff rd.shell=0"
   GRUB_TIMEOUT=0
   GRUB_DISABLE_RECOVERY="true"
   ```

1. Guarde los cambios y cierre el archivo `grub`.

1. Vuelva a compilar el archivo de configuración GRUB2.

   ```
   [ec2-user ~]$ sudo grub2-mkconfig -o /boot/grub2/grub.cfg
   ```

1. En instancias basadas en procesadores Intel y AMD, el comando `send-diagnostic-interrupt` envía una *interrupción no enmascarable desconocida* (NMI) a la instancia. Debe configurar el kernel para que se bloquee cuando reciba la NMI desconocida. Abra el archivo `/etc/sysctl.conf` con su editor de texto preferido y agregue lo siguiente.

   ```
   kernel.unknown_nmi_panic=1
   ```

1. Reinicie la instancia y vuelva a conectarse a ella.

1. Compruebe que el kernel se haya iniciado con el parámetro `crashkernel` correcto.

   ```
   $ grep crashkernel /proc/cmdline
   ```

   La siguiente salida de ejemplo indica una configuración correcta.

   ```
   BOOT_IMAGE=/boot/vmlinuz-4.14.128-112.105.amzn2.x86_64 root=UUID=a1e1011e-e38f-408e-878b-fed395b47ad6 ro crashkernel=256M console=tty0 console=ttyS0,115200n8 net.ifnames=0 biosdevname=0 nvme_core.io_timeout=4294967295 rd.emergency=poweroff rd.shell=0
   ```

1. Compruebe que el servicio **kdump** está en ejecución.

   ```
   [ec2-user ~]$ systemctl status kdump.service
   ```

   La siguiente salida de ejemplo muestra el resultado si el servicio **kdump** se está ejecutando.

   ```
   kdump.service - Crash recovery kernel arming
      Loaded: loaded (/usr/lib/systemd/system/kdump.service; enabled; vendor preset: enabled)
      Active: active (exited) since Fri 2019-05-24 23:29:13 UTC; 22s ago
     Process: 2503 ExecStart=/usr/bin/kdumpctl start (code=exited, status=0/SUCCESS)
    Main PID: 2503 (code=exited, status=0/SUCCESS)
   ```

**nota**  
De forma predeterminada, el archivo de volcado de bloque se guarda en `/var/crash/`. Para cambiar la ubicación, modifique el archivo `/etc/kdump.conf` utilizando su editor de texto preferido.

**Para configurar SUSE Linux Enterprise, Ubuntu o Red Hat Enterprise Linux**  
En instancias basadas en procesadores Intel y AMD, el comando `send-diagnostic-interrupt` envía una *interrupción no enmascarable desconocida* (NMI) a la instancia. Debe configurar el kernel para que se bloquee cuando reciba la NMI desconocida, al ajustar el archivo de configuración del sistema operativo. Para obtener más información acerca de cómo configurar el kernel para que se bloquee, consulte la documentación de su sistema operativo:
+ [SUSE Linux Enterprise](https://www.suse.com/support/kb/doc/?id=3374462)
+ [Ubuntu](https://ubuntu.com/server/docs/kernel-crash-dump)
+ [ Red Hat Enterprise Linux (RHEL)](https://access.redhat.com/solutions/6038)

### instancias de Windows
<a name="diagnostic-interrupt-prereqs-windows"></a>

**Para configurar Windows para generar un volcado de memoria cuando se produce un error de parada**

1. Conéctese a la instancia.

1. Abra el **Panel de control** y seleccione **Sistema**, **Configuración avanzada del sistema**.

1. En el cuadro de diálogo **Propiedades del sistema**, seleccione la pestaña **Avanzadas**.

1. En la sección **Inicio y recuperación**, elija **Configuración...**.

1. En la sección **Error del sistema**, establezca la configuración según sea necesario y, a continuación, elija **Aceptar**.

Para obtener más información sobre la configuración de errores de parada de Windows, consulte [ Overview of memory dump file options for Windows](https://support.microsoft.com/en-us/help/254649/overview-of-memory-dump-file-options-for-windows).

## Enviar una interrupción de diagnóstico
<a name="diagnostic-interrupt-use"></a>

Después de haber completado los cambios de configuración necesarios, puede enviar una interrupción de diagnóstico a su instancia mediante la AWS CLI o la API de Amazon EC2.

------
#### [ AWS CLI ]

**Para enviar una interrupción de diagnóstico a su instancia**  
Utilice el comando [send-diagnostic-interrupt](https://docs.aws.amazon.com/cli/latest/reference/ec2/send-diagnostic-interrupt.html).

```
aws ec2 send-diagnostic-interrupt --instance-id i-1234567890abcdef0
```

------
#### [ PowerShell ]

**Para enviar una interrupción de diagnóstico a su instancia**  
Utilice el cmdlet [Send-EC2DiagnosticInterrupt](https://docs.aws.amazon.com/powershell/latest/reference/items/Send-EC2DiagnosticInterrupt.html).

```
Send-EC2DiagnosticInterrupt -InstanceId i-1234567890abcdef0
```

------