How to occur hung_task_panic on Rocky Linux
만약 RedHat 계정이 있다면 아래 RedHat 솔루션 페이지를 한번 읽어볼것을 권장한다.
hung_task_panic 설정의 경우 Rocky Linux라고 다르지 않다.
실제 CentOS 7에서도 동일하게 설정이 가능하다.
hung_task_panic 설정
hung_task_panic 에 따른 vmcore를 분석해야 하는 경우 다음과 같은 설정을 수행해야 한다.
먼저 CentOS와 동일하게 kdump가 동작중이어야 한다.
[root@localhost rocky]# systemctl status kdump
● kdump.service - Crash recovery kernel arming
Loaded: loaded (/usr/lib/systemd/system/kdump.service; enabled; vendor preset: enabled)
Active: active (exited) since Wed 2021-10-23 10:34:10 UTC; 3 days ago
Main PID: 875 (code=exited, status=0/SUCCESS)
Tasks: 0 (limit: 23554)
Memory: 0B
CGroup: /system.slice/kdump.service
Oct 23 10:34:09 dubaek-testvm.novalocal systemd[1]: Starting Crash recovery kernel arming...
Oct 23 10:34:10 dubaek-testvm.novalocal kdumpctl[875]: kdump: kexec: loaded kdump k
nel
Oct 23 10:34:10 dubaek-testvm.novalocal kdumpctl[875]: kdump: Starting kdump: [OK]`
Oct 23 10:34:10 dubaek-testvm.novalocal systemd[1]: Started Crash recovery kernel arming.
kdump가 위와 같이 동작되는 환경에서 아래 설정을 추가한다.
[root@localhost rocky]# echo 1 > /proc/sys/kernel/hung_task_panic
NOTE
실제 위 설정은 permanent 한 설정이 아니기에 지속적으로 설정하고자 한다면
/etc/sysctl.conf에 kernel.hung_task_panic = 1을 추가해 놓자
참고사항으로 아래 timeout 이상의 시간을 hung_task_panic 발생까지 기다리게 된다.
잘못된 재부팅과 hung_task_panic 상황을 만들기 싫다면 해당 timeout 시간을 늘리는것도 하나의 방법이다.
[root@localhost rocky]# cat /proc/sys/kernel/hung_task_timeout_secs
120
hung_task_panic 테스트
실제 hung_task_panic을 1로 설정하고 정상적으로 hung_task에 대한 panic이 발생되는지 확인을 위해
다음과 같은 작업을 수행해보자.
테스트를 위해서는 하나의 서버에 두개의 terminal을 연결이 필요하다.
먼저 첫번째 terminal에서는 다음 명령을 수행한다.
[root@localhost rocky]# while true; do dd if=/dev/zero of=/tmp/dd_tempfile bs=15 count=2100; done
두번째 terminal에서는 다음 명령을 수행한다.
아래 명령을 수행함과 동시에 첫번째 terminal에서 동작되던 dd는 멈추게 된다.
[root@localhost rocky]# fsfreeze -f /tmp
위 과정이 수행하고 나면 처음에는 별다른 반응이 없고 terminal도 정상적으로 동작되나
앞서 확인했던 hung_task_timeout_secs 이상의 시간이 소요되면 (hung_task로 판별되는데에 시간이 좀더 소요되는것으로 예상)
해당 서버가 강제로 재부팅되는것을 확인할 수 있다.
실제 재부팅 이후에 다음과 같은 vmcore 파일이 생성되었음을 확인할수 있다.
[root@localhost rocky]# cd /var/crash/
[root@localhost 127.0.0.1-2021-11-01-09:03:24]# pwd
/var/crash/127.0.0.1-2021-11-01-09:03:24
[root@localhost 127.0.0.1-2021-11-01-09:03:24]# ls -al
total 134272
drwxr-xr-x. 2 root root 67 Nov 1 09:03 .
drwxr-xr-x. 3 root root 43 Nov 1 09:03 ..
-rw-r--r--. 1 root root 41468 Nov 1 09:03 kexec-dmesg.log
-rw-------. 1 root root 137407493 Nov 1 09:03 vmcore
-rw-r--r--. 1 root root 40025 Nov 1 09:03 vmcore-dmesg.txt