속도를 주고, 메모리를 취한다. Swap Memory
램 1GB짜리 마이크로 인스턴스에서 뭐 좀 해보려다 혈압 올라서 작성한 가난한 서버를 위한 심폐소생술.
돈 아끼려다 명만 짧아진다
새 프로젝트 덩치가 작길래 “굳이 비싼 거 쓸 필요 있나?” 싶어서 AWS t3.micro 를 질렀다.
램 1GB. 귀엽다.
근데 이 거지 같은 스펙을 너무 얕봤다.
dnf install docker… 하고 좀 지나니 서버가 응답이 없다.
뭐 빌드 좀 하려고 하면 멈추고, 심지어 무거운 패키지 업데이트만 돌려도 헉헉댄다.
로그 볼 필요도 없다.
뻔하지. 메모리 부족(OOM)이다.
도커도 안 깔리는 서버라니… 갖다 버릴까 하다가, 이미 인스턴스 띄운 시간이 아까워서 Swap으로 떼우기로 했다.
디스크를 램처럼 써서 속도는 좀 느리겠지만, 당장 설치는 돼야 할 거 아니냐.
RHEL/CentOS 계열에서 빠르게 스왑 잡는 법 정리한다.
1. 스왑 파일 생성 (Feat. dd)
파티션 쪼갤 여유 없다. 파일로 대충 만든다. 마이크로 인스턴스니까 욕심부리지 말고 2GB만 잡자. (램의 2배 국룰)
# 1. 2GB 빈 파일 생성
# bs=128M * count=16 = 2048MB
sudo dd if=/dev/zero of=/swapfile bs=128M count=16
dd 치고 커서가 깜빡거려도 쫄지 마라.
EC2 EBS 볼륨 성능에 따라 몇 초에서 몇 십 초 걸린다. 멍 때리면 됨.
2. 권한 설정 및 활성화
이 파일은 이제부터 ‘메모리’다. 아무나 건드리면 안 된다.
# 2. 권한 설정 (600: root만 읽/쓰 가능)
sudo chmod 600 /swapfile
# 3. 스왑 영역으로 포맷
sudo mkswap /swapfile
# >> UUID랑 사이즈 나오면 정상
# 4. 스왑 활성화 (이게 진짜)
sudo swapon /swapfile
3. 생존 확인
이제 숨통이 좀 트였는지 확인해 보자.
# 메모리 상태 확인
free -h
Swap: 부분에 2.0G 잡혀 있으면 성공이다.
이제 도커 설치 다시 돌려보면 안 멈추고 잘 돌아간다.
진작 할 걸.
4. 재부팅 방지 (fstab 등록)
이거 까먹으면 인스턴스 재부팅했을 때 다시 도커 죽고 난리 난다.
/etc/fstab에 박아놔야 리부팅 후에도 스왑이 붙는다.
# 편집기 오픈
sudo vi /etc/fstab
# 맨 아래줄에 추가
/swapfile swap swap defaults 0 0
5. (선택) Swappiness 조절
SSD(EBS)가 아무리 빨라도 램보단 느리다. 리눅스 커널이 스왑을 너무 좋아해서 툭하면 디스크를 긁어대는데, 이걸 좀 말려야 한다.
기본값 60은 너무 높고, 10 정도로 낮춰서 “진짜 램 모자랄 때만 써라” 라고 해두자.
# 현재 설정 확인
cat /proc/sys/vm/swappiness
# 10으로 낮추기 (당장 적용)
sudo sysctl vm.swappiness=10
# 재부팅 후에도 유지하려면
# /etc/sysctl.conf 파일 맨 밑에 추가
vm.swappiness=10
요약
- t2.micro 같은 거 쓸 거면 묻지도 따지지도 말고 스왑부터 잡아라.
dd->mkswap->swapon->fstab순서.- 이거 설정하고 나니까 거짓말처럼 도커 컴포즈까지 잘 뜬다.
물론 트래픽 터지면 스왑이고 나발이고 인스턴스 사양 올려야 함.
이건 어디까지나 “설치 및 구동용” 땜빵이다.
마침.