ESXi 운영환경에서 가끔 VM 들이 hang 이 걸리거나 하였을 때 dump 를 생성해야 하는 경우가 있는데, 일반 베어메탈 환경에서는 NMI switch 등을 활용하실것입니다.
그렇다면 가상화 환경에서는 어떻게 하느냐, 3가지 방법이 있습니다.
https://kb.vmware.com/s/article/2149185
- webclient 에서 NMI 신호 보내기
- vm-support 커맨드를 통해서 NMI 신호 보내기
- vmdumper 커맨드를 통해서 NMI 신호 보내기
상세한 방법은 위 KB 를 참조하시면 됩니다.
문제는 ESXi 에서 NMI 신호를 보내더라도 OS 에서 감지를 해주어야 한다는 것입니다.
윈도우의 경우는 제가 알기로는 윈도우서버 2008 버전에는 NMI 키를 레지스트리에 추가해주어야 하고, 그 이후버전에서는 별도의 키추가는 필요없는것으로 알고 있습니다. (https://ryuchan.kr/515)
리눅스의 경우는 CentOS 7 을 기준으로 보면..
ESXi 에서 NMI 신호를 보내면, OS 에서 감지는 하지만, Reboot 을 한다던지등의 액션이 발생하지 않습니다.
[root@ntp01 etc]# Message from syslogd@ntp01 at May 14 13:20:46 ... kernel:Uhhuh. NMI received for unknown reason 30 on CPU 0. Message from syslogd@ntp01 at May 14 13:20:46 ... kernel:Do you have a strange power saving mode enabled? Message from syslogd@ntp01 at May 14 13:20:46 ... kernel:Dazed and confused, but trying to continue
위에처럼 나오고 실제로는 죽거나 하지 않는데요, 제가 확인한바로는 CentOS 의 기본설정에서는 unknown NMI 신호에 대해서 디폴트로 커널 패닉을 발생시키지 않습니다. 아마 ESXi 에서 보내는 NMI 신호를 unknown NMI 로 인지하는것 같습니다.
그렇다면 어떻게 해야 하느냐, 몇가지가 필요합니다.
- kdump 가 active 및 enable 상태여야 합니다.
- 설정방법은 저 같은 경우는 https://www.linuxtechi.com/how-to-enable-kdump-on-rhel-7-and-centos-7/ 을 참조하였습니다.
- 추가적으로 /etc/kdump.conf 파일에서 NMI 신호발생시 디폴트 액션으로 reboot 을 하도록 추가하였습니다. (default reboot)
- /etc/sysctl.conf 파일에 다음 커널파라미터 값이 추가되어야 합니다.
- kernel.unknown_nmi_panic = 1 (디폴트 0)
이렇게 설정하고 나서 다시 NMI 신호를 발생시키면, 바로 시스템 접속이 끊키면서 리붓이 되고 기본값으로 /var/crash 폴더 밑에 vmcore 덤프가 생성됩니다.
다만 unknown NMI 를 인지하도록 변경했을 때 발생할 수 있는 사이드임팩트가 있을수 있으니 주의하시면 되겠습니다.
- esxi 호스트에서 vmdumper -l 커맨드로 NMI 를 발생시키고자 하는 VM 의 wID 를 확인후
- vmdumper <wid> nmi 실행
reboot 후 덤프 생성 확인
[root@ntp01 ~]# cd /var/crash/ [root@ntp01 crash]# ls 127.0.0.1-2019-05-14-13:42:22 [root@ntp01 crash]# cd 127.0.0.1-2019-05-14-13\:42\:22/ [root@ntp01 127.0.0.1-2019-05-14-13:42:22]# ls vmcore vmcore-dmesg.txt [root@ntp01 127.0.0.1-2019-05-14-13:42:22]# ls -al total 31692 drwxr-xr-x. 2 root root 44 May 14 13:42 . drwxr-xr-x. 3 root root 43 May 14 13:42 .. -rw-------. 1 root root 32338619 May 14 13:42 vmcore -rw-r--r--. 1 root root 108802 May 14 13:42 vmcore-dmesg.txt
위와 같이 생성이 되었고, vmcore-dmesg.txt 를 보면 아래와 같이 unknown NMI 수신후 커널패닉을 발생시킨 것을 볼 수 있습니다.
[ 117.815595] Uhhuh. NMI received for unknown reason 30 on CPU 0. [ 117.815663] Do you have a strange power saving mode enabled? [ 117.815702] Dazed and confused, but trying to continue [ 352.445966] Uhhuh. NMI received for unknown reason 20 on CPU 0. [ 352.446002] Do you have a strange power saving mode enabled? [ 352.446025] Dazed and confused, but trying to continue [ 397.401719] Uhhuh. NMI received for unknown reason 30 on CPU 0. [ 397.401783] Do you have a strange power saving mode enabled? [ 397.401824] Dazed and confused, but trying to continue [ 513.762720] Uhhuh. NMI received for unknown reason 20 on CPU 0. [ 513.762779] Do you have a strange power saving mode enabled? [ 513.762821] Kernel panic - not syncing: NMI: Not continuing
참고 부탁드립니다.