IT관련

[Linux] 스와핑(Swapping) 발생 시 CPU 점유율이 높아지는 이유

파란하늘999 2026. 3. 17. 15:38

리눅스 시스템 운영 중 메모리가 부족해지면 스와핑(Swapping) 현상이 발생합니다. 흔히 "메모리가 부족하면 디스크를 쓰니까 CPU는 상관없지 않나?"라고 생각하기 쉽지만, 실제로는 CPU 사용량이 폭증하며 시스템이 버벅거리게 됩니다.

 

그 이유를 핵심만 정리해 보겠습니다.

1. 과도한 페이지 폴트(Page Fault) 처리

프로세스가 RAM에 없는 데이터에 접근하려고 하면 하드웨어 인터럽트인 **'페이지 폴트'**가 발생합니다.

  • CPU는 하던 일을 멈추고 제어권을 운영체제(커널)에 넘깁니다.
  • 커널은 디스크(Swap 영역)에서 해당 데이터를 찾아 RAM으로 올리는 복잡한 예외 처리 과정을 수행합니다.
  • 이 과정이 수천, 수만 번 반복되면서 CPU는 '실제 계산'이 아닌 '데이터 찾기'에 기력을 다 소진합니다.

2. 페이지 교체 알고리즘(LRU 등)의 부하

메모리가 꽉 차면 새로운 데이터를 넣기 위해 기존 데이터 중 하나를 골라 디스크로 쫓아내야(Page-out) 합니다.

  • CPU는 **"어떤 페이지를 내보낼 것인가?"**를 결정하기 위해 메모리 참조 기록을 뒤지며 알고리즘을 계산합니다.
  • 메모리 압박이 심할수록 이 계산 빈도가 잦아지며 CPU 오버헤드가 급격히 증가합니다.

3. I/O Wait와 시스템 모드의 간섭

디스크 I/O는 RAM에 비해 수십만 배 느립니다.

  • CPU는 디스크 처리가 끝날 때까지 기다려야(I/O Wait) 하는데, 이 대기 시간 동안 커널은 다음 작업을 준비하거나 문맥 교환(Context Switching)을 시도하며 바쁘게 움직입니다.
  • top 명령어를 쳤을 때 %wa(I/O Wait)와 %sy(System) 수치가 높게 나타나는 이유가 바로 이것입니다.

💡 결정타: 스래싱(Thrashing) 현상

스와핑이 한계치에 다다르면 시스템은 스래싱(Thrashing) 상태에 빠집니다.

  1. 메모리 부족 → 스와핑 발생
  2. CPU가 스와핑 작업(I/O 지휘)에만 매달림
  3. 정작 실제 프로그램 실행 속도는 느려짐
  4. OS는 "CPU가 일을 안 하네?"라고 착각하여 다른 프로세스를 더 실행함
  5. 메모리가 더 부족해지고 스와핑이 폭증함 (무한 루프)

✅ 요약 및 해결책

  • 이유: CPU가 데이터의 위치를 찾고, 메모리와 디스크 사이의 짐 싸기(Page-in/out)를 지휘하느라 정작 본업을 못 하기 때문.
  • 해결책:
    1. RAM 증설: 가장 확실한 물리적 해결책입니다.
    2. Swappiness 조절: /proc/sys/vm/swappiness 값을 낮춰 스왑 사용 억제.
    3. 메모리 누수 확인: 특정 프로세스가 메모리를 과하게 먹고 있는지 htop 등으로 체크.

글을 마치며

 

리눅스 서버의 CPU 사용량이 갑자기 높다면, 무조건 연산량이 많다고 판단하기보다 free -m 명령어로 스왑 상태를 먼저 확인해 보시기 바랍니다!

 

 

 

반응형