swap 설정하기
2G 메모리를 가진 MongoDB 인스턴스에서 메모리가 부족하다는 메시지를 계속 받았다.
메모리를 제외하고는 큰 문제가 없어서 확인을 해보니 swap 영역의 크기가 0 이었다. swap은 디스크를 메모리처럼 사용하는 거라, 성능에 좋지 않아서 기본설정이 사용하지 않도록 되어있다.
MongoDB의 메모리 문제를 해결하기 위해 swap을 이용하기로 내부 결정을 하였다.
설정은 다음과 같다.
# swap 확인
$> sudo swapon -s
$> sudo free -m
total used free shared buff/cache available
Mem: 1955 271 1169 0 515 1537
Swap: 0 0 0
#swap 만들기
$> sudo fallocate -l 4G /swapfile
$> sudo chmod 600 /swapfile
$> sudo mkswap /swapfile
Setting up swapspace version 1, size = 4 GiB (4294963200 bytes)
no label, UUID=67f5331d-d17a-4c67-9d77-b819114a9aab
$> sudo swapon /swapfile
sudo swapon -s
Filename Type Size Used Priority
/swapfile file 4194300 0 -2
$> free -m
total used free shared buff/cache available
Mem: 1955 271 1169 0 515 1537
Swap: 4095 0 4095
마지막으로 서버가 재부팅 되었을때, swap파일이 적용되도록 수정을 해야 한다.
$> sudo vi /etc/fstab
# 가장 아래 부분에 추가
/swapfile none swap sw 0 0
추가 swap 삭제 하기
# swap 메모리 제거
$> sudo swapoff -v /swapfile
swapoff /swapfile
# 물리 파일 제거
$> sudo rm -f /swapfile
swap 메모리를 제거할때 여유 공간이 없을 경우 다음과 같은 오류가 발생 할수 있다.
$> sudo swapoff -a
swapoff: /swapfile: swapoff failed: Cannot allocate memory
이럴때는 서비스를 종료 해서 메모리를 충분히 확보후 실행하면 된다.