진단 인터럽트

Prev Next

VPC 환경에서 이용 가능합니다 .

운영 체제 설정에 따라 메모리 덤프(Memory Dump)를 수집할 수 있는 네이버 클라우드 플랫폼에서의 진단 인터럽트에 대해 설명합니다. 진단 인터럽트는 사용자 CLI와 API를 통해 수행 가능하며, 진단 인터럽트를 사용하기 위한 조건은 다음과 같습니다.

  • 하이퍼바이저 및 OS 별 지원여부
    하이퍼바이저OS지원여부
    KVM Linux O
    Windows O
    XEN Linux X
    Windows O
  • 서버 외부에서 네이버 클라우드 플랫폼의 API, CLI를 사용할 수 있는 경우
주의

진단 인터럽트는 서버에 BSOD(블루스크린)을 강제로 발생시키는 기능입니다. 데이터가 유실될 우려가 있으므로, 해당 기능 사용 시 주의해 주십시오.

참고
  • Bare Metal Server는 진단 인터럽트 기능을 지원하지 않습니다.
  • 생성된 Memory Dump에 대한 분석은 지원하지 않습니다.

필요 상황

진단 인터럽트가 필요한 상황은 다음과 같습니다.

  • 사용자 애플리케이션에 대해 메모리 덤프 분석이 필요한 경우
  • 기타 OS 이슈로 분석이 필요한 경우

Windows 전체 메모리 덤프 사전 설정 - KVM & XEN

기본 설정의 경우 "Automatic memory dump"가 설정되어 있으나, 이 경우 전체 메모리에 대한 덤프가 누락되어 애플리케이션 메모리를 확인하는 것이 어렵습니다. 따라서 Windows에서 BSOD 발생 시 전체 메모리에 대한 덤프가 가능하도록 설정하고 Page 파일에 대해 설정해야 합니다.
전체 메모리 덤프가 가능하도록 설정하는 것은 운영 체제 성능에 큰 영향을 미치지 않으나, 이슈가 해결될 경우 원복해도 무관합니다. 단, 원복할 경우 진단 인터럽트(또는 BSOD) 발생 시 전체 메모리 덤프가 수집되지 않습니다.

Windows 메모리 덤프 설정

Windows에서 BSOD 발생 시 전체 메모리 덤프가 가능하도록 설정하는 방법은 다음과 같습니다.

  1. i-server_window_start(1) > i-server_setting > System > Advanced system settings > [Advanced]를 차례대로 클릭해 주십시오.
    server-diagnostic-interrupt-windows-1
  2. System failureAutomatically restart 체크 박스를 클릭하여 선택해 주십시오.
  3. Startup and Recovery[Settings] 버튼을 클릭한 후 Write debugging information의 드롭 다운 메뉴에서 Complete memory dump를 선택해 주십시오.
    server-diagnostic-interrupt-windows-2
  4. 팝업 창의 [OK] 버튼을 클릭해 주십시오.
  5. Write debugging informationOverwrite any existing file 체크 박스를 클릭하여 선택해 주십시오.
  6. [OK] 버튼을 클릭해 주십시오.

Paging 파일 설정

Paging 파일을 설정하는 방법은 다음과 같습니다.

참고

%SystemRoot% 파티션은 부팅 시스템 파일이 존재하는 파티션으로, 해당 파티션에 Paging 파일이 존재해야 합니다. 기본값으로 Windows를 설치한 경우, C:\가 됩니다.

  1. i-server_window_start(1) > i-server_setting > System > Advanced system settings > [Advanced]을 차례대로 클릭해 주십시오.
  2. Performance[Settings] 버튼을 클릭하고 [Advanced] 탭을 클릭한 후 Virtual memory[Change] 버튼을 클릭해 주십시오.
    server-diagnostic-interrupt-windows-3
  3. Automatically manage paging file size for all drives 체크 박스를 클릭하여 선택 해제해 주십시오.
  4. Custom size를 클릭하여 선택한 후 RAM 보다 크게 C:\ 아래에 존재하도록 Paging 파일 크기를 설정해 주십시오.
    • 다음 이미지는 물리 메모리가 8 GB일 때 설정 예시입니다.
      server-diagnostic-interrupt-windows-4
    • Paging 파일의 크기는 물리적인 메모리보다 최소한 257 MB 크게 설정해야 합니다.
      서버의 RAM 용량 권장 Paging File 크기
      4 GB 4,353 MB 이상
      8 GB 8,449 MB 이상
      16 GB 16,641 MB 이상
      32 GB 33,025 MB 이상
      64 GB 65,793 MB 이상
  5. [Set] > [OK] 버튼을 차례대로 클릭해 주십시오.
주의
  • 메모리 덤프는 C:\ Windows에 저장됩니다. C:\ 볼륨에 최소 메모리 용량 이상의 여유가 있어야 합니다. 여유 공간이 충분히 있는지 확인해 주십시오. 메모리 용량이 큰 서버의 경우, D:\ 볼륨(추가 디스크)을 활용하여 2번 절차에서 덤프 파일의 위치를 수정해 주십시오.
  • 메모리 용량이 큰 서버의 경우, 메모리 덤프 수집에 더 오랜 시간이 소요될 수 있습니다.

적용

Windows를 재부팅해야 설정이 적용됩니다. 설정 사항 적용이 완료되면 진단 인터럽트 발생 시 BSOD가 발생되며 이때, 전체 메모리에 대한 덤프가 수집됩니다.

참고

Windows에 대한 기술 문의가 필요할 경우, 다음을 참고해 주십시오.

  • Knowledge Base 검색 및 참고
  • 커뮤니티에 문의
  • Visual Studio 구독자(이전 MSDN 구독)인 경우, 다음 방법을 통해 MS의 공식 지원을 받을 수 있습니다.

Linux 전체 메모리 덤프 사전 설정 - RHEL 계열 (KVM)

RHEL 계열(RHEL, Rocky Linux, Navix) 운영 체제는 kdump를 이용하여 커널 패닉 발생 시 메모리 덤프를 수집합니다. 기본 설정 상태에서는 진단 인터럽트로 전달된 NMI(Non-Maskable Interrupt)를 커널이 처리하지 않고 무시하므로, 진단 인터럽트를 수행하기 전에 kdump 설치와 커널 패닉 연동 설정을 완료해야 합니다.
kdump를 설정하는 것은 운영 체제 성능에 큰 영향을 미치지 않으나, 이슈가 해결될 경우 원복해도 무관합니다. 단, 원복할 경우 진단 인터럽트 발생 시 메모리 덤프가 수집되지 않습니다.

주의

사전 설정을 완료하지 않은 상태에서 진단 인터럽트를 수행하면 게스트 운영 체제가 NMI를 무시합니다. 이 경우 커널 패닉과 서버 재시작이 발생하지 않으며 메모리 덤프도 수집되지 않으므로, 반드시 아래 설정을 먼저 완료해 주십시오.

참고
  • crashkernel 예약 메모리 설정은 커널 부팅 옵션 변경을 포함하므로, 설정을 적용하려면 서버를 재시작해야 합니다.
  • Windows의 Overwrite any existing file 과 같은 덮어쓰기 옵션이 제공되지 않아 진단 인터럽트를 수행할 때마다 덤프 파일이 누적됩니다. 디스크 용량 관리가 필요한 경우 덤프 파일 누적 관리를 설정해 주십시오.

kdump 패키지 설치

kdump 동작에 필요한 kexec-tools 패키지를 설치하는 방법은 다음과 같습니다.

  1. 다음 명령어를 실행하여 kexec-tools 패키지를 설치해 주십시오.
dnf install -y kexec-tools
참고

dnf를 제공하지 않는 RHEL 7 계열의 경우 yum install -y kexec-tools 명령어를 사용해 주십시오.

crashkernel 예약 메모리 설정

kdump는 커널 패닉이 발생하면 메모리 덤프를 수집하기 위해 별도의 캡처 커널(capture kernel)을 실행합니다. 캡처 커널이 사용할 메모리는 서버 부팅 시점에 미리 예약해야 하며, 예약된 메모리가 부족하면 덤프 수집에 실패합니다.
아래 두 가지 방법 중 하나를 선택하여 설정해 주십시오.

방법 1. RAM 크기에 따라 커널이 자동으로 예약 (권장)

  1. 다음 명령어를 실행하여 RAM 구간별 예약 크기를 설정해 주십시오.
grubby --update-kernel=ALL --args="crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M"
  1. 위 설정을 적용한 경우 서버의 RAM 용량에 따라 다음과 같이 예약됩니다.

    RAM 범위 예약 크기
    1 GB 이상 4 GB 미만 192 MB
    4 GB 이상 64 GB 미만 256 MB
    64 GB 이상 512 MB

방법 2. 서버의 RAM 용량을 확인하여 직접 지정

  1. 다음 명령어를 실행하여 예약 메모리 크기를 직접 설정해 주십시오.
grubby --update-kernel=ALL --args="crashkernel=256M"
  1. RAM 용량별 권장 예약 크기는 다음과 같습니다.

    서버의 RAM 용량 권장 crashkernel 크기
    4 GB ~ 32 GB 256 MB
    64 GB 이상 512 MB

커널 패닉 연동 설정

진단 인터럽트는 서버에 NMI를 전달하는 방식으로 동작합니다. RHEL 계열은 원인을 식별할 수 없는 NMI를 기본적으로 무시하므로, NMI 수신 시 커널 패닉이 발생하도록 설정해야 합니다.

  1. 다음 명령어를 실행하여 커널 패닉 연동 옵션을 추가해 주십시오.
echo 'kernel.unknown_nmi_panic = 1' > /etc/sysctl.d/99-nmi-panic.conf
  1. 다음 명령어를 실행하여 설정을 적용해 주십시오.
sysctl --system

메모리 덤프 수집 범위 설정

Windows의 Complete memory dump 와 동일하게 애플리케이션 메모리까지 확인할 수 있도록 덤프 수집 범위를 설정하는 방법은 다음과 같습니다.

  1. 다음 명령어를 실행하여 kdump 설정 파일을 편집기로 열어 주십시오.
vi /etc/kdump.conf
  1. 파일 내용에서 다음 항목을 찾아 변경하거나, 항목이 없는 경우 추가해 주십시오.
path /var/crash
core_collector makedumpfile -l --message-level 7 -d 23
  1. 각 항목에 대한 설명은 다음과 같습니다.

    항목 설명
    path /var/crash 메모리 덤프 파일을 저장할 경로
    -l 덤프 파일을 lzo 방식으로 압축
    --message-level 7 덤프 수집 과정의 상세 로그 출력
    -d 23 덤프에서 제외할 페이지 지정. 0으로 채워진 페이지, 캐시 페이지, 캐시 프라이빗 페이지, 사용하지 않는(free) 페이지를 제외하며 사용자 프로세스 메모리는 포함하므로 애플리케이션 상태를 확인할 수 있습니다.

덤프 파일 누적 관리

Windows는 덮어쓰기 설정(Overwrite any existing file)을 통해 항상 최신 덤프 파일 하나만 유지하지만, Linux 계열은 진단 인터럽트를 수행할 때마다 덤프 파일이 누적됩니다. 디스크 용량 관리가 필요한 경우 다음과 같이 보관 기간을 설정해 주십시오.

  1. 다음 명령어를 실행하여 설정 파일을 편집기로 열어 주십시오.
vi /etc/tmpfiles.d/kdump-cleanup.conf
  1. 다음 내용을 추가해 주십시오. 접근 시간 또는 수정 시간이 30일을 초과한 덤프 파일이 제거됩니다.
e /var/crash - - - 30d

kdump 활성화 및 적용

설정한 내용을 적용하는 방법은 다음과 같습니다.

  1. 다음 명령어를 실행하여 kdump 서비스를 활성화하고 시작해 주십시오.
systemctl enable --now kdump
  1. 다음 명령어를 실행하여 kdump 서비스 상태를 확인해 주십시오.
kdumpctl status
  1. 다음 명령어를 실행하여 서버를 재시작해 주십시오. crashkernel 예약 메모리는 재시작 후에 적용됩니다.
reboot

설정 확인

서버 재시작 후 사전 설정이 정상적으로 적용되었는지 확인하는 방법은 다음과 같습니다.

  1. 다음 명령어를 실행하여 crashkernel 예약 메모리가 커널 부팅 옵션에 적용되었는지 확인해 주십시오.
cat /proc/cmdline | grep crashkernel
  1. 다음 명령어를 실행하여 예약 메모리가 실제로 할당되었는지 확인해 주십시오.
cat /proc/iomem | grep -i "crash kernel"
  1. 다음 명령어를 실행하여 kdump 서비스가 활성화되어 있는지 확인해 주십시오.
systemctl is-enabled kdump
kdumpctl status
  1. 다음 명령어를 실행하여 커널 패닉 연동 옵션이 적용되었는지 확인해 주십시오. 값이 1로 출력되어야 합니다.
sysctl kernel.unknown_nmi_panic

메모리 덤프 파일 확인

진단 인터럽트를 수행한 후 메모리 덤프가 정상적으로 수집되었는지 확인하는 방법은 다음과 같습니다.

  1. 진단 인터럽트 수행 시 서버 콘솔에 다음과 같은 커널 패닉 메시지가 출력되는지 확인해 주십시오.
Uhhuh. NMI received for unknown reason 30 on CPU 0.
Kernel panic - not syncing: NMI: Not continuing
CPU: 0 PID: 0 Comm: swapper/0 Kdump: loaded Not tainted
  1. 서버가 재시작되어 운영중 상태가 되면 서버에 접속한 후 다음 명령어를 실행하여 덤프 디렉터리를 확인해 주십시오. 덤프는 <수집 IP>-<수집 일시> 형식의 디렉터리에 저장됩니다.
ls -al /var/crash/
  1. 다음 명령어를 실행하여 덤프 파일이 생성되었는지 확인해 주십시오.
ls -al /var/crash/127.0.0.1-2026-08-04-20:20:11/
  1. 생성되는 파일은 다음과 같습니다.

    파일 설명
    vmcore 수집된 메모리 덤프 파일
    vmcore-dmesg.txt 커널 패닉 시점의 커널 로그
    kexec-dmesg.log 덤프 수집에 사용된 캡처 커널의 부팅 로그
참고

네이버 클라우드 플랫폼은 메모리 덤프 파일에 대한 분석을 지원하지 않습니다. 수집된 vmcore 파일은 crash 유틸리티 등 별도의 도구를 이용하여 분석해 주십시오.

Linux 전체 메모리 덤프 사전 설정 - Ubuntu 계열 (KVM)

Ubuntu 계열 운영 체제는 kdump-tools를 이용하여 커널 패닉 발생 시 메모리 덤프를 수집합니다. 기본 설정 상태에서는 진단 인터럽트로 전달된 NMI(Non-Maskable Interrupt)를 커널이 처리하지 않고 무시하므로, 진단 인터럽트를 수행하기 전에 kdump-tools 설치와 커널 패닉 연동 설정을 완료해야 합니다.
kdump를 설정하는 것은 운영 체제 성능에 큰 영향을 미치지 않으나, 이슈가 해결될 경우 원복해도 무관합니다. 단, 원복할 경우 진단 인터럽트 발생 시 메모리 덤프가 수집되지 않습니다.

주의

사전 설정을 완료하지 않은 상태에서 진단 인터럽트를 수행하면 게스트 운영 체제가 NMI를 무시합니다. 이 경우 커널 패닉과 서버 재시작이 발생하지 않으며 메모리 덤프도 수집되지 않으므로, 반드시 아래 설정을 먼저 완료해 주십시오.

참고
  • 커널 부팅 옵션이 변경되므로, 설정을 적용하려면 서버를 재시작해야 합니다.
  • Windows의 Overwrite any existing file 과 같은 덮어쓰기 옵션이 제공되지 않아 진단 인터럽트를 수행할 때마다 덤프 파일이 누적됩니다. 디스크 용량 관리가 필요한 경우 덤프 파일 누적 관리를 설정해 주십시오.

linux-crashdump 패키지 설치

kdump 동작에 필요한 패키지를 설치하는 방법은 다음과 같습니다.

  1. 다음 명령어를 실행하여 linux-crashdump 패키지를 설치해 주십시오.
apt update && apt install -y linux-crashdump
  1. 설치 과정에서 kdump-tools 사용 여부를 묻는 화면이 표시되면 <Yes> 를 선택해 주십시오.
참고

linux-crashdump 패키지는 kdump-tools, makedumpfile 등 덤프 수집에 필요한 구성 요소를 함께 설치합니다.

crashkernel 예약 메모리 확인

kdump는 커널 패닉이 발생하면 메모리 덤프를 수집하기 위해 별도의 캡처 커널(capture kernel)을 실행합니다. 캡처 커널이 사용할 메모리는 서버 부팅 시점에 미리 예약해야 하며, Ubuntu 계열은 패키지 설치 시 예약 메모리 설정 파일이 자동으로 생성됩니다.

  1. 다음 명령어를 실행하여 설정 파일이 생성되었는지 확인해 주십시오.
cat /etc/default/grub.d/kdump-tools.cfg
  1. 다음과 같이 RAM 구간별 예약 크기가 설정되어 있는지 확인해 주십시오.
GRUB_CMDLINE_LINUX_DEFAULT="$GRUB_CMDLINE_LINUX_DEFAULT crashkernel=2G-4G:320M,4G-32G:512M,32G-64G:1024M,64G-128G:2048M,128G-:4096M"
  1. 위 설정이 적용된 경우 서버의 RAM 용량에 따라 다음과 같이 예약됩니다.

    RAM 범위 예약 크기
    2 GB 이상 4 GB 미만 320 MB
    4 GB 이상 32 GB 미만 512 MB
    32 GB 이상 64 GB 미만 1,024 MB
    64 GB 이상 128 GB 미만 2,048 MB
    128 GB 이상 4,096 MB
참고

예약 메모리 크기를 변경해야 하는 경우 /etc/default/grub.d/kdump-tools.cfg 파일을 수정한 후 update-grub 명령어를 실행하여 부트로더 설정에 반영해 주십시오.

커널 패닉 연동 설정

진단 인터럽트는 서버에 NMI를 전달하는 방식으로 동작합니다. Ubuntu 계열은 원인을 식별할 수 없는 NMI를 기본적으로 무시하므로, NMI 수신 시 커널 패닉이 발생하도록 설정해야 합니다.

  1. 다음 명령어를 실행하여 커널 패닉 연동 옵션을 추가해 주십시오.
cat <<EOF > /etc/sysctl.d/99-diagnostic-interrupt.conf
kernel.unknown_nmi_panic = 1
kernel.panic_on_unrecovered_nmi = 1
kernel.panic_on_io_nmi = 1
EOF
  1. 각 옵션에 대한 설명은 다음과 같습니다.

    옵션 설명
    kernel.unknown_nmi_panic 원인을 식별할 수 없는 NMI 수신 시 커널 패닉 발생
    kernel.panic_on_unrecovered_nmi 복구할 수 없는 NMI 수신 시 커널 패닉 발생
    kernel.panic_on_io_nmi I/O 관련 NMI 수신 시 커널 패닉 발생
  2. 다음 명령어를 실행하여 설정을 적용해 주십시오.

sysctl --system

kdump 서비스 설정 확인

kdump-tools 서비스가 사용 상태로 설정되어 있는지 확인하는 방법은 다음과 같습니다.

  1. 다음 명령어를 실행해 주십시오.
cat /etc/default/kdump-tools | grep USE_KDUMP
  1. USE_KDUMP=1로 출력되는지 확인해 주십시오. 값이 0인 경우 /etc/default/kdump-tools 파일을 편집기로 열어 USE_KDUMP=1로 변경해 주십시오.

덤프 파일 누적 관리

Windows는 덮어쓰기 설정(Overwrite any existing file)을 통해 항상 최신 덤프 파일 하나만 유지하지만, Linux 계열은 진단 인터럽트를 수행할 때마다 덤프 파일이 누적됩니다. 디스크 용량 관리가 필요한 경우 다음과 같이 보관 기간을 설정해 주십시오.

  1. 다음 명령어를 실행하여 설정 파일을 편집기로 열어 주십시오.
vi /etc/tmpfiles.d/kdump-cleanup.conf
  1. 다음 내용을 추가해 주십시오. 접근 시간 또는 수정 시간이 30일을 초과한 덤프 파일이 제거됩니다.
e /var/crash - - - 30d

적용

설정한 내용을 적용하는 방법은 다음과 같습니다.

  1. 다음 명령어를 실행하여 서버를 재시작해 주십시오. crashkernel 예약 메모리는 재시작 후에 적용됩니다.
reboot

설정 확인

서버 재시작 후 사전 설정이 정상적으로 적용되었는지 확인하는 방법은 다음과 같습니다.

  1. 다음 명령어를 실행하여 crashkernel 예약 메모리가 커널 부팅 옵션에 적용되었는지 확인해 주십시오.
cat /proc/cmdline | grep crashkernel
  1. 다음과 같이 예약 메모리 구간이 포함되어 출력되는지 확인해 주십시오.
BOOT_IMAGE=/boot/vmlinuz-6.8.0-124-generic root=UUID=... ro crashkernel=auto console=ttyS0,115200n8 console=tty0 crashkernel=2G-4G:320M,4G-32G:512M,32G-64G:1024M,64G-128G:2048M,128G-:4096M
  1. 다음 명령어를 실행하여 kdump 설정과 서비스 상태를 확인해 주십시오.
kdump-config show
kdump-config status
  1. 다음 명령어를 실행하여 커널 패닉 연동 옵션이 적용되었는지 확인해 주십시오. 세 항목 모두 값이 1로 출력되어야 합니다.
sysctl kernel.unknown_nmi_panic kernel.panic_on_unrecovered_nmi kernel.panic_on_io_nmi

메모리 덤프 파일 확인

진단 인터럽트를 수행한 후 메모리 덤프가 정상적으로 수집되었는지 확인하는 방법은 다음과 같습니다.

  1. 서버가 재시작되어 운영중 상태가 되면 서버에 접속한 후 다음 명령어를 실행하여 덤프 디렉터리를 확인해 주십시오. 덤프는 <수집 일시> 형식의 디렉터리에 저장됩니다.
ls -al /var/crash/
  1. 다음 명령어를 실행하여 덤프 파일이 생성되었는지 확인해 주십시오.
ls -al /var/crash/202608052118/
  1. 생성되는 파일은 다음과 같습니다.

    파일 설명
    dump.<수집 일시> 수집된 메모리 덤프 파일
    dmesg.<수집 일시> 커널 패닉 시점의 커널 로그
    linux-image-<커널 버전>-<수집 일시>.crash 커널 크래시 요약 정보 파일
    kexec_cmd 덤프 수집에 사용된 kexec 실행 정보
참고

네이버 클라우드 플랫폼은 메모리 덤프 파일에 대한 분석을 지원하지 않습니다. 수집된 덤프 파일은 crash 유틸리티 등 별도의 도구를 이용하여 분석해 주십시오.

API/CLI 사용 방법

API 및 CLI를 통해 진단 인터럽트를 사용하는 방법은 다음과 같습니다.

  1. 진단 인터럽트가 필요한 상황에 해당하는지 확인해 주십시오.
  2. 다음 가이드를 참고하여 API 및 CLI를 실행해 주십시오.
  3. 네이버 클라우드 플랫폼 콘솔의 VPC 환경에서 Menu > All Services > Compute > Server 메뉴를 차례대로 클릭한 후 서버의 설정중 상태를 확인해 주십시오.
  4. 서버의 재시작 상태를 확인해 주십시오.
  5. 서버 상태가 운영중으로 변경되면 접속을 시도해 주십시오.
참고
  • API, CLI 실행 즉시 서버에 강제 인터럽트가 발생합니다.
  • [서버 관리 및 설정 변경] > 서버 콘솔 스크린샷 기능을 통해 현재 인터럽트 발생 후 진행 상황을 확인할 수 있습니다.
  • 진단 인터럽트 발생 시, 정상 재부팅이 되지 않을 경우 [강제 정지] 버튼이 활성화됩니다. [강제 정지] 기능에 대해 자세한 정보는 강제 정지 및 반납을 참고해 주십시오.