진단 인터럽트 보내기(고급 사용자용) - Amazon Elastic Compute Cloud

진단 인터럽트 보내기(고급 사용자용)

주의

진단 인터럽트를 고급 사용자를 대상으로 하는 기능입니다. 잘못 사용하면 인스턴스에 부정적인 영향을 줄 수 있습니다. 진단 인터럽트를 인스턴스에 전송하면 인스턴스가 고장 나거나 재부팅될 수 있으며 이는 데이터 손실로 이어질 수 있습니다.

연결할 수 없거나 응답이 없는 Linux 인스턴스에 진단 인터럽트를 보내 커널 패닉을 수동으로 트리거 할 수 있습니다.

Linux 운영 체제는 일반적으로 커널 패닉이 발생할 때 충돌하고 재부트됩니다. 운영 체제의 특정 동작은 해당 구성에 따라 다릅니다. 커널 패닉을 사용하여 인스턴스의 운영 체제 커널이 크래시 덤프 파일 생성과 같은 작업을 수행하도록 할 수도 있습니다. 그런 다음 크래시 덤프 파일의 정보를 사용하여 근본 원인 분석을 수행하고 인스턴스를 디버그할 수 있습니다.

크래시 덤프 데이터는 인스턴스 자체에서 운영 체제에 의해 로컬로 생성됩니다.

인스턴스에 진단 인터럽트를 전송하기 전에 운영 시스템에 대한 문서를 읽고 필요한 구성을 변경하시기를 권장합니다.

지원되는 인스턴스 유형

진단 인터럽트는 AWS Graviton 프로세서에서 제공되는 경우를 제외한 모든 Nitro 기반 인스턴스 유형에서 지원됩니다. 자세한 내용은 AWS Nitro 시스템에 구축된 인스턴스AWS Graviton을 참조하세요.

필수 조건

진단 인터럽트를 사용하기 전에 인스턴스의 운영 체제를 구성해야 합니다. 이는 커널 패닉이 발생할 때 필요한 조치가 수행되도록 합니다.

커널 패닉이 발생할 때 크래시 덤프를 생성하도록 Amazon Linux 2를 구성하려면
  1. 인스턴스에 연결합니다.

  2. kexeckdump를 설치합니다.

    [ec2-user ~]$ sudo yum install kexec-tools -y
  3. 보조 커널에 적절한 양의 메모리를 예약하도록 커널을 구성하세요. 예약할 메모리 크기는 인스턴스의 사용 가능한 총 메모리에 따라 다릅니다. 원하는 텍스트 편집기를 사용하여 /etc/default/grub 파일을 열고, GRUB_CMDLINE_LINUX_DEFAULT로 시작하는 줄을 찾은 다음 crashkernel 매개 변수를 다음 형식으로 추가하세요: crashkernel=memory_to_reserve 예를 들어 160MB를 예약하려면 grub 파일을 다음과 같이 수정합니다.

    GRUB_CMDLINE_LINUX_DEFAULT="crashkernel=160M 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"
  4. 변경 내용을 저장하고 grub 파일을 닫습니다.

  5. GRUB2 구성 파일을 재구축합니다.

    [ec2-user ~]$ sudo grub2-mkconfig -o /boot/grub2/grub.cfg
  6. Intel 및 AMD 프로세서 기반의 인스턴스에서 send-diagnostic-interrupt 명령은 알 수 없는 NMI(Non-Maskable Interrupt)를 인스턴스에 보냅니다. 알 수 없는 NMI를 수신하면 커널이 충돌하도록 구성해야합니다. 원하는 텍스트 편집기를 사용하여 /etc/sysctl.conf 파일을 열고 다음을 추가합니다.

    kernel.unknown_nmi_panic=1
  7. 재부팅하고 인스턴스에 다시 연결하세요.

  8. 커널이 올바른 crashkernel 매개 변수로 부팅되었는지 확인하세요.

    $ grep crashkernel /proc/cmdline

    다음 예제 출력은 구성 성공을 나타냅니다.

    BOOT_IMAGE=/boot/vmlinuz-4.14.128-112.105.amzn2.x86_64 root=UUID=a1e1011e-e38f-408e-878b-fed395b47ad6 ro crashkernel=160M console=tty0 console=ttyS0,115200n8 net.ifnames=0 biosdevname=0 nvme_core.io_timeout=4294967295 rd.emergency=poweroff rd.shell=0
  9. kdump 서비스가 실행 중인지 확인합니다.

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

    다음 예제 출력은 kdump 서비스가 실행 중인 경우의 결과를 보여줍니다.

    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)
참고

기본적으로 크래시 덤프 파일은 /var/crash/에 저장됩니다. 위치를 변경하려면 원하는 텍스트 편집기를 사용하여 /etc/kdump.conf 파일을 수정하세요.

커널 패닉이 발생할 때 크래시 덤프를 생성하도록 Amazon Linux를 구성하려면
  1. 인스턴스에 연결합니다.

  2. kexeckdump를 설치합니다.

    [ec2-user ~]$ sudo yum install kexec-tools -y
  3. 보조 커널에 적절한 양의 메모리를 예약하도록 커널을 구성하세요. 예약할 메모리 크기는 인스턴스의 사용 가능한 총 메모리에 따라 다릅니다.

    $ sudo grubby --args="crashkernel=memory_to_reserve" --update-kernel=ALL

    예를 들어, 크래시 커널을 위해 160MB를 예약하려면 다음 명령을 사용하세요.

    $ sudo grubby --args="crashkernel=160M" --update-kernel=ALL
  4. Intel 및 AMD 프로세서 기반의 인스턴스에서 send-diagnostic-interrupt 명령은 알 수 없는 NMI(Non-Maskable Interrupt)를 인스턴스에 보냅니다. 알 수 없는 NMI를 수신하면 커널이 충돌하도록 구성해야합니다. 원하는 텍스트 편집기를 사용하여 /etc/sysctl.conf 파일을 열고 다음을 추가합니다.

    kernel.unknown_nmi_panic=1
  5. 재부팅하고 인스턴스에 다시 연결하세요.

  6. 커널이 올바른 crashkernel 매개 변수로 부팅되었는지 확인하세요.

    $ grep crashkernel /proc/cmdline

    다음 예제 출력은 구성 성공을 나타냅니다.

    root=LABEL=/ console=tty1 console=ttyS0 selinux=0 nvme_core.io_timeout=4294967295 LANG=en_US.UTF-8 KEYTABLE=us crashkernel=160M
  7. kdump 서비스가 실행 중인지 확인합니다.

    [ec2-user ~]$ sudo service kdump status

    서비스가 실행 중이면 명령이 Kdump is operational 응답을 반환합니다.

참고

기본적으로 크래시 덤프 파일은 /var/crash/에 저장됩니다. 위치를 변경하려면 원하는 텍스트 편집기를 사용하여 /etc/kdump.conf 파일을 수정하세요.

SUSE Linux Enterprise, Ubuntu 또는 Red Hat Enterprise Linux를 구성하려면

Intel 및 AMD 프로세서 기반의 인스턴스에서 send-diagnostic-interrupt 명령은 알 수 없는 NMI(Non-Maskable Interrupt)를 인스턴스에 보냅니다. 알 수 없는 NMI를 수신하면 운영 체제의 구성 파일을 조정하여 커널이 충돌하도록 구성해야 합니다. 커널이 충돌하도록 구성하는 방법에 대한 자세한 내용은 운영 체제에 대한 설명서를 참조하세요.

진단 인터럽트 보내기

필요한 구성 변경을 완료하면 AWS CLI 또는 Amazon EC2 API를 사용하여 인스턴스에 진단 인터럽트를 보낼 수 있습니다.

인스턴스에 진단 인터럽트를 보내는 방법(AWS CLI)

send-diagnostic-interrupt 명령을 사용하고 인스턴스 ID를 지정하세요.

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