Linux 서버를 운영하다 보면 CPU 사용률이 갑자기 높아졌지만 특정 프로세스는 CPU를 거의 사용하지 않는 이상한 상황을 경험할 수 있습니다. top이나 htop에서는 원인을 찾기 어렵지만 mpstat, vmstat, cat /proc/interrupts 등을 확인해 보면 인터럽트가 비정상적으로 증가하는 경우가 있습니다.
이처럼 특정 장치가 짧은 시간 동안 과도한 인터럽트를 발생시키는 현상을 Interrupt Storm이라고 합니다. Interrupt Storm이 발생하면 CPU는 실제 애플리케이션보다 인터럽트 처리에 대부분의 시간을 사용하게 되어 전체 시스템 성능이 크게 저하됩니다.
이번 글에서는 Linux에서 CPU Interrupt Storm이 발생하는 원인과 진단 및 해결 방법을 알아보겠습니다.
CPU Interrupt Storm이란?
CPU는 디스크, 네트워크 카드, USB, RAID Controller 등의 장치에서 인터럽트를 받아 작업을 처리합니다.
정상적인 경우에는 필요한 만큼만 인터럽트가 발생하지만, 장치 이상이나 드라이버 문제로 인해 초당 수십만 번 이상의 인터럽트가 발생하면 CPU는 인터럽트 처리에만 집중하게 됩니다.
대표적인 증상은 다음과 같습니다.
- CPU 사용률 급증
- 시스템 응답 속도 저하
- Load Average 증가
- 네트워크 지연
- 디스크 성능 저하
- Soft Lockup 발생
- Hard Lockup 발생
Interrupt Storm이 발생하는 대표적인 원인
다음과 같은 상황에서 자주 발생합니다.
- 네트워크 카드(NIC) 드라이버 오류
- RAID Controller 문제
- NVMe SSD 오류
- USB 장치 이상
- IRQ 불균형
- BIOS 버그
- 커널 드라이버 문제
- 하드웨어 불량
- 가상화 환경 문제
- 오래된 펌웨어
실무에서는 인터럽트 발생 횟수를 가장 먼저 확인해야 합니다.
1. 인터럽트 확인하기
가장 먼저 인터럽트 발생 현황을 확인합니다.
cat /proc/interrupts
예시
CPU0 CPU1 CPU2 CPU3
24: 1023423 12 10 9 IR-PCI-MSI eth0
특정 IRQ 값이 매우 빠르게 증가한다면 Interrupt Storm을 의심할 수 있습니다.
2. 인터럽트 변화 확인하기
실시간으로 확인합니다.
watch -n 1 cat /proc/interrupts
1초마다 인터럽트 증가량을 확인할 수 있습니다.
3. CPU 인터럽트 사용률 확인하기
mpstat -P ALL 1
다음 항목을 확인합니다.
- %usr
- %sys
- %irq
- %soft
%irq 또는 %soft 값이 높다면 인터럽트 처리에 CPU가 많이 사용되고 있는 것입니다.
4. SoftIRQ 확인하기
SoftIRQ 발생량 확인
cat /proc/softirqs
예시
NET_RX
NET_TX
BLOCK
TIMER
NET_RX 값이 매우 빠르게 증가한다면 네트워크 인터럽트가 원인일 가능성이 높습니다.
5. 네트워크 상태 확인하기
네트워크 장치 오류를 확인합니다.
ip -s link
또는
ethtool -S eth0
다음 항목을 확인합니다.
- RX Errors
- TX Errors
- Dropped
- Missed Packet
패킷 오류가 많다면 NIC 이상일 가능성이 있습니다.
6. CPU 사용률 확인하기
top
또는
htop
CPU 사용률은 높은데 프로세스 사용률은 낮다면 인터럽트 사용량을 의심합니다.
7. IRQ Balance 확인하기
IRQ Balance 서비스 상태를 확인합니다.
systemctl status irqbalance
실행되어 있지 않다면
systemctl start irqbalance
인터럽트를 여러 CPU에 분산하여 처리할 수 있습니다.
8. 하드웨어 이벤트 로그 확인하기
ipmitool sel list
다음 항목을 확인합니다.
- PCI Error
- NIC Error
- RAID Error
- Bus Error
하드웨어 이상이 반복되는지 확인합니다.
9. 커널 로그 확인하기
dmesg | grep -Ei "irq|interrupt"
또는
journalctl -k | grep -Ei "irq|interrupt"
IRQ 관련 오류나 드라이버 메시지를 확인합니다.
10. 드라이버 및 펌웨어 확인하기
다음 항목을 확인합니다.
- NIC Driver
- RAID Firmware
- BIOS
- NVMe Firmware
오래된 드라이버는 Interrupt Storm의 원인이 될 수 있습니다.
Interrupt Storm 문제를 확인하는 순서
실무에서는 다음 순서대로 점검하는 것이 효율적입니다.
/proc/interrupts확인- 인터럽트 증가량 확인
mpstat확인/proc/softirqs확인- 네트워크 상태 확인
- CPU 사용률 확인
- IRQ Balance 확인
- IPMI 이벤트 로그 확인
dmesg확인- 드라이버 및 펌웨어 점검
이 순서대로 점검하면 대부분의 원인을 빠르게 찾을 수 있습니다.
Interrupt Storm을 예방하는 방법
다음과 같은 관리 방법을 권장합니다.
- IRQ Balance 활성화
- 최신 NIC 드라이버 사용
- BIOS 및 펌웨어 업데이트
- 네트워크 장비 점검
- CPU 인터럽트 모니터링
- 불필요한 장치 제거
- 하드웨어 이벤트 로그 점검
- 커널 최신 안정 버전 유지
특히 고성능 네트워크 서버에서는 인터럽트 분산 설정을 정기적으로 확인하는 것이 중요합니다.
자주 묻는 질문
Interrupt Storm은 CPU 문제인가요?
반드시 그렇지는 않습니다. 대부분 네트워크 카드, RAID Controller, NVMe SSD 등의 장치에서 과도한 인터럽트가 발생하여 CPU가 영향을 받는 경우가 많습니다.
irqbalance를 실행하면 모두 해결되나요?
일부 환경에서는 도움이 되지만, 장치 자체의 드라이버나 하드웨어 문제가 원인이라면 근본적인 해결은 되지 않습니다.
SoftIRQ와 Interrupt Storm은 같은 의미인가요?
아닙니다. SoftIRQ는 커널의 인터럽트 처리 방식 중 하나이며, Interrupt Storm은 인터럽트가 과도하게 발생하는 현상을 의미합니다. Interrupt Storm이 발생하면 SoftIRQ 사용량도 함께 증가하는 경우가 많습니다.
마무리
CPU Interrupt Storm은 특정 장치가 과도한 인터럽트를 발생시켜 CPU 성능을 저하시키는 대표적인 장애입니다. /proc/interrupts, mpstat, /proc/softirqs, ethtool, ipmitool 등을 활용하면 원인을 효과적으로 분석할 수 있습니다. 특히 네트워크 장비와 드라이버, IRQ 분산 설정을 주기적으로 점검하면 장애를 예방하고 안정적인 서버 운영에 큰 도움이 됩니다.