꾸준히 성장하는 개발자

[GitAction] EC2에서 스왑(Swap) 추가하기 — 메모리 부족(OOM) 대응 본문

그 외...

[GitAction] EC2에서 스왑(Swap) 추가하기 — 메모리 부족(OOM) 대응

ahleum 2026. 4. 2. 15:46

 

GitHub Actions self-hosted runner에서 pnpm installnext build를 돌리다 보면

인스턴스 RAM이 작을 때 OOM(Out Of Memory) 으로 프로세스가 죽는 경우가 있다.

스왑은 실제 RAM을 늘리는 건 아니지만, 일시적으로 메모리 압박을 완화해 빌드가 끝까지 가게 도와준다.

 

스왑은 디스크를 쓰기 때문에 느려질 수 있다.

근본 해결은 인스턴스 타입 상향이지만, 비용·긴급 대응으로 스왑은 자주 쓰는 방법이다.

 

사전 확인

1) 메모리

free -h

Swap이 0이고, 빌드 중 OOM이 났다면 스왑 추가를 검토한다.

 

2) 디스크 여유 (루트 볼륨)

스왑 파일은 보통 /swapfile로 루트 디스크에 만든다. 4GB 스왑을 만들려면 여유 공간이 4GB 이상 있는지 확인한다.

df -h /

Avail 컬럼을 본다.

 

 


 

스왑 파일 생성 (예: 4GB, dd 방식)

dd는 디스크에 0을 채워 파일을 만든다. fallocate보다 느리지만 환경에 따라 호환성이 좋다.

sudo dd if=/dev/zero of=/swapfile bs=128M count=32 status=progress
  • bs=128M count=32 → 약 4GB (2GB로 줄이려면 count=16)

권한 및 스왑 포맷·활성화:

sudo chmod 600 /swapfile

sudo mkswap /swapfile

sudo swapon /swapfile

 

적용 확인

sudo swapon --show

free -h

 

Swap에 크기가 잡혀 있으면 성공이다.


재부팅 후에도 유지 (/etc/fstab)

이미 같은 줄이 있으면 중복 추가하지 않는다.

grep '/swapfile' /etc/fstab || echo '/swapfile swap swap defaults 0 0' | sudo tee -a /etc/fstab

 


 

GitHub Actions 러너가 죽었을 때

OOM 이후 러너 서비스가 내려갔을 수 있으므로 다시 올린다.

cd ~/actions-runner

sudo ./svc.sh start

sudo ./svc.sh status

 

 

정리

항목 설명
목적 RAM 부족 OOM 완화 (특히 CI 빌드)
전제 루트 디스크에 스왑 파일 크기만큼 여유 공간
한계 속도는 RAM보다 느림트래픽 많은 서비스의 상시 해결책만으로는 부족할 있음