Linux 서버를 운영하다 보면 커널 로그에서 soft lockup이라는 메시지를 발견하는 경우가 있습니다. 서버가 완전히 멈춘 것은 아니지만 CPU 사용률이 급격히 증가하거나 시스템 응답 속도가 크게 느려지고, 특정 프로세스가 종료되지 않는 현상이 함께 나타날 수 있습니다.
Soft Lockup은 CPU가 너무 오랫동안 하나의 작업만 수행하여 커널 스케줄러가 정상적으로 동작하지 못하는 상태를 의미합니다. 이 상태가 지속되면 서비스 지연이 발생하고, 심한 경우 Hard Lockup이나 Kernel Panic으로 이어질 수 있습니다.
이번 글에서는 Soft Lockup의 원인과 실무에서 사용하는 진단 및 해결 방법을 알아보겠습니다.
Soft Lockup이란 무엇인가?
Soft Lockup은 CPU가 일정 시간 이상 커널 공간에서 실행되면서 다른 작업으로 전환(Context Switch)되지 못하는 상태입니다.
대표적인 로그는 다음과 같습니다.
BUG: soft lockup - CPU#2 stuck for 23s!
또는
watchdog: BUG: soft lockup - CPU#0 stuck for 22s
기본적으로 Linux Watchdog이 CPU가 장시간 응답하지 않는 상황을 감지하여 출력합니다.
Soft Lockup이 발생하는 대표적인 원인
다음과 같은 경우에 자주 발생합니다.
- 무한 루프에 빠진 커널 코드
- 커널 버그
- 디바이스 드라이버 오류
- CPU 과부하
- 인터럽트 처리 지연
- 파일 시스템 오류
- 디스크 I/O 병목
- 가상화 환경 문제
- 오래된 커널 버전
- 하드웨어 이상
실무에서는 CPU와 Call Trace를 함께 확인하는 것이 핵심입니다.
1. 커널 로그 확인하기
Soft Lockup 로그를 확인합니다.
dmesg | grep -i "soft lockup"
또는
journalctl -k | grep -i "soft lockup"
발생 시간과 CPU 번호를 확인합니다.
2. Call Trace 확인하기
Soft Lockup에는 대부분 Call Trace가 포함됩니다.
dmesg | grep -A 40 "Call Trace"
Call Trace를 분석하면 어느 함수에서 CPU가 멈췄는지 확인할 수 있습니다.
3. CPU 사용률 확인하기
현재 CPU 상태를 확인합니다.
top
또는
htop
프로세스별 사용률 확인
ps -eo pid,comm,%cpu --sort=-%cpu
CPU를 독점하는 프로세스가 있는지 확인합니다.
4. Load Average 확인하기
uptime
또는
cat /proc/loadavg
CPU 코어 수보다 Load Average가 지속적으로 높다면 병목이 발생하고 있을 가능성이 있습니다.
5. 인터럽트 확인하기
인터럽트가 과도하게 발생하는지 확인합니다.
cat /proc/interrupts
특정 장치의 인터럽트가 비정상적으로 증가하는 경우 드라이버 문제를 의심할 수 있습니다.
6. 디스크 I/O 확인하기
디스크 병목으로 인해 Soft Lockup이 발생하는 경우도 있습니다.
iostat -x 1
또는
iotop
다음 항목을 확인합니다.
- %util
- await
- svctm
- r/s
- w/s
디스크 응답 시간이 매우 길다면 I/O 병목 가능성이 있습니다.
7. 메모리 상태 확인하기
메모리 부족도 Soft Lockup의 원인이 될 수 있습니다.
free -h
또는
vmstat 1
Swap 사용량과 Memory Pressure를 함께 확인합니다.
8. 커널 버전 확인하기
uname -r
최근 커널 업데이트 이후 발생했다면 커널 버그 여부를 확인합니다.
설치된 커널 확인
RPM 계열
rpm -qa | grep kernel
Debian 계열
dpkg -l | grep linux-image
9. Crash Dump 확인하기
kdump가 활성화되어 있다면 Crash Dump를 확인합니다.
ls /var/crash
분석
crash vmcore
Soft Lockup 발생 당시의 커널 상태를 분석할 수 있습니다.
10. 하드웨어 로그 확인하기
CPU와 메모리 오류 여부를 확인합니다.
ipmitool sel list
ECC 오류, CPU 오류, 전원 문제 등이 기록되어 있는지 확인합니다.
Soft Lockup 문제를 확인하는 순서
실무에서는 다음 순서대로 점검하는 것이 효율적입니다.
dmesg확인journalctl -k확인- Call Trace 분석
- CPU 사용률 확인
- Load Average 확인
- 인터럽트 확인
- 디스크 I/O 확인
- 메모리 상태 확인
- 커널 버전 확인
- 하드웨어 로그 확인
이 순서대로 진행하면 대부분의 원인을 빠르게 파악할 수 있습니다.
Soft Lockup을 예방하는 방법
Soft Lockup은 CPU 자원 부족이나 커널 문제에서 자주 발생하므로 예방이 중요합니다.
다음과 같은 방법을 권장합니다.
- 커널 최신 안정 버전 사용
- CPU 과부하 방지
- 디스크 I/O 모니터링
- Load Average 관리
- 인터럽트 균형(IRQ Balance) 설정
- ECC 메모리 사용
- 정기적인 하드웨어 점검
- Watchdog 활성화
특히 CPU를 장시간 독점하는 애플리케이션은 주기적으로 점검하는 것이 좋습니다.
자주 묻는 질문
Soft Lockup이 발생하면 서버가 멈춘 것인가요?
반드시 그렇지는 않습니다. 시스템은 동작하지만 특정 CPU가 장시간 응답하지 못하는 상태를 의미합니다.
Soft Lockup과 Hard Lockup의 차이는 무엇인가요?
Soft Lockup은 커널 스케줄링이 지연된 상태이고, Hard Lockup은 CPU 인터럽트 자체가 동작하지 않는 더 심각한 상태입니다.
재부팅하면 해결되나요?
일시적으로 증상이 사라질 수 있지만, 커널 버그나 드라이버 문제라면 다시 발생할 가능성이 높으므로 원인을 분석해야 합니다.
마무리
Soft Lockup은 Linux 커널이 CPU 응답 지연을 감지했을 때 출력하는 중요한 경고입니다. dmesg, journalctl, Call Trace, top, iostat, vmstat 등을 활용하면 CPU 병목과 커널 문제를 효과적으로 분석할 수 있습니다. 반복적으로 발생하는 Soft Lockup은 Hard Lockup이나 Kernel Panic으로 이어질 수 있으므로 조기에 원인을 파악하고 적절히 대응하는 것이 안정적인 서버 운영의 핵심입니다.