t2.micro OOM 예방 – SWAP 설정으로 안전하게!

무지성개발자·2025년 5월 27일
0

개요

픽블엽의 로그를 확인하던 중, 서버가 예상치 않게 재시작된 흔적을 발견했다. 원인을 추적한 결과, OOM(Out Of Memory)을 의심하게 되었고, 이를 방지하기 위해 SWAP 설정을 적용하게 됐다.

OOM

OOM (Out Of Memory) 은 시스템에 할당할 수 있는 물리 메모리가 부족해질 때 발생하는 현상으로, 커널이 이를 감지하고 메모리를 많이 사용하는 프로세스를 강제 종료시킨다. 이 경우 서버가 예기치 않게 중단되거나, 중요한 프로세스가 죽는 일이 발생할 수 있다.

SWAP

SWAP은 메모리가 부족할 때, 디스크의 일부 공간을 메모리처럼 사용하는 방법으로 OOM을 예방하는 유용한 기법이다.

왜 OOM을 방지해야 했을까?

현재 픽블엽 서비스는 t2.micro 인스턴스에 nginx와 애플리케이션 서버를 함께 운영 중이다.
t2.micro는 메모리가 1GB에 불과하지만, 초기 트래픽이 많지 않기 때문에 저렴하게 시스템을 구축할 수 있다고 판단하고 ec2 한대에 모든 서버를 같이 운영 하기로 했다.

하지만 서버의 재시작 흔적을 본 후 다음과 같은 가능성들을 고려하게 됐다.

  • 메모리 누수 (Memory Leak)
  • 추후 사용자 증가 및 서버 증설
  • Redis 같은 추가 서비스 설치

즉, 지금은 문제가 없어도 언제든지 메모리 부족 상황이 올 수 있다는 판단이 들었고, 그 대비책으로 SWAP 선택 했다.

메모리 확인

bash

free -t

free -t 명령어를 통해 시스템의 메모리 상태를 확인 할 수 있다.

  • 사용중인 메모리(used)
  • 사용중이지 않는 메모리(free)
  • 실제 사용가능한 여유 메모리(available)

SWAP 적용

SWAP 크기는 AWS의 공식문서를 보면 권장 수준이 있다.

bash

sudo fallocate -l 1G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

# 그 다음에
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

위 명령어들을 차례대로 실행하면 1GB의 스왑 공간이 할당된다.
마지막 명령어는 SWAP의 영구 적용시켜 시스템이 재부팅돼도 자동으로 SWAP이 활성화 시켜준다. 하지만 반복 실행하면 부팅오류가 나는 원인이 되니 반드시 한번만 실행해야 한다.

SWAP 적용 확인

bash

swapon --show

SWAP이 잘 적용 됐다면 위 이미지 같이 확인 가능하다.

프리티어 사용자에게 SWAP은 필수

t2.micro를 사용하더라도 실사용자가 많지 않다면 큰 문제는 없지만, 스왑은 거의 필수라고 생각한다.
특히, 예기치 않은 트래픽 급증이나 백그라운드 서비스가 늘어날 가능성이 있는 경우, 최소한의 SWAP 설정은 시스템을 안정적으로 운영하는 데 큰 도움이 될거라 예상한다.

결론

t2.micro 같이 저사양 인스턴스는 메모리가 매우 제한적이니 OOM예방을 위한 SWAP설정은 권장을 넘어 필수라고 생각한다.
문제라고 한다면 실제로 디스크를 사용하는 시점에는 디스크 I/O에 부담이 있겠지만 서비스가 죽는 거랑 비교한다면 문제도 아니라고 생각한다.

profile
no-intelli 개발자 입니다. 그래도 intellij는 씁니다.

0개의 댓글