1. 서론
- EC2에서
Gradle 빌드
시 인스턴스가 멈추는 현상
이 발생했습니다.
- 이는 메모리 부족으로 인해 발생한 문제로, 스왑 메모리(swap)를 설정하여 해결할 수 있었습니다.
- 이번 글에서는 스왑 메모리란 무엇인지와 이를 설정하는 방법을 상세히 소개합니다.
2. 문제 발생 원인
EC2 인스턴스의 낮은 메모리 용량
- AWS 무료 플랜에 포함된 t2.micro 인스턴스는
1GB 메모리
를 제공합니다.
- Jenkins 서버와 같은 애플리케이션은 백그라운드에서 많은 메모리를 소비하기 때문에 Gradle 빌드 과정에서 메모리가 부족할 가능성이 높습니다.
3. 스왑 메모리(Swap Memory)이란?
- 스왑(Swap) 은 물리 메모리(RAM)가 부족할 때 보조기억장치 일부를
가상 메모리
로 사용하는 방식입니다.
- 스왑을 설정하면, 부족한
메모리 일부를 디스크로 대체
하여 시스템이 중단되지 않고 정상적으로 동작할 수 있습니다.
4. 해결 과정: 메모리 스왑 설정
1) 스왑공간 생성
- 메모리 스왑을 위해선 우선, 스왑을 위한 공간을 할당해야합니다.
- 명령어로
128mb
블럭을 16개
만들어 2gb
용량을 확보했습니다.
sudo dd if=/dev/zero of=/swapfile bs=128M count=16
- 명령어 설명
dd
파일복사 및 변환 명령어, 데이터복사 또는 파일생성시 사용
if=/dev/zero
0으로만 채워진 파일 생성, 스왑파일 초기화용도
of=/swapfile
스왑파일 경로 지정
bs
블록크기지정
count
블록수지정
- 출력결과
16+0 records in
16+0 records out
2147483648 bytes (2.1 GB, 2.0 GiB) copied, 32.2645 s, 66.6 MB/s
2) 스왑파일 권한설정
- 스왑파일의 접근 권한을 설정해줍니다. 다른 그룹이나 사용자의 접근을 차단합니다.
sudo chmod 600 /swapfile # 스왑파일 권한설정, 다른그룹이나 사용자 접근 차단
3) 스왑 영역 설정
- 커널이 생성한 스왑 파일을 스왑 영역으로 인식하도록
mkswap
명령어로 설정해줍니다.
sudo mkswap /swapfile
Setting up swapspace version 1, size = 2 GiB (2147479552 bytes)
no label, UUID=a6ded867-1c58-411e-89b3-7dcfafbc1217
4) 스왑 영역 활성화
swapon
명령어로 설정된 스왑 영역을 활성화해줍니다.
sudo swapon /swapfile # 스왑공간에 스왑 파일 추가 즉시활성화
5) 스왑 영역 확인
sudo swapon -s
Filename Type Size Used Priority
/swapfile file 2097148 0 -2
MiB Mem : 957.4 total, 108.4 free, 875.7 used, 102.1 buff/cache
MiB Swap: 2048.0 total, 1345.2 free, 702.8 used. 81.8 avail Mem
6) 스왑 영역 영구 저장
- 부팅 시 스왑 파일이 자동으로 활성화되도록 설정합니다.
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
- 각명령어는 다음과 같습니다.
tee
표준입력을 읽어 파일로 저장,
-a
기존파일내용유지하며 새로운 내용 추가 (append)
/etc/fstab
부팅시 마운트해야할 파일 시스템 정보와 스왑공간 저장하는 설정파일
- 결론
- 스왑 메모리(Swap Memory) 를 활용하여 메모리가 제한적인 환경에서도 시스템을 안정적으로 운영할 수 있었습니다.
- 스왑 메모리 설정은 간단하면서도 메모리 부족으로 인한 성능 문제를 효과적으로 완화할 수 있는 방법입니다.
- 하지만 스왑 메모리는 디스크를 사용하기 때문에 실제 RAM만큼 빠르지 않습니다. 따라서, 가능하다면 RAM 용량을 늘리는 것이 더 나은 선택이 될 수 있습니다.