스왑 메모리 그게 뭐지? 중요한 건가? 처음 들어보는데 할 수 있다.
한번 중요한지 안 중요한지 알아보자.
Swap Memory
Swap Memory란 실제로 존재하는 메모리 공간은 가득 차서 더 이상 여유 공간이 존재하지 않을 때 필요한 만큼 디스크 공간을 이용하여 부족한 메모리를 대체할 수 있는 메모리라고 할 수 있다. 간단히 말하면 가상 메모리라고 하면 이해하기 쉽다.
하지만 실제 메모리 공간이 아닌 디스크에 저장하는 만큼 공간은 늘어 이점이 될 수 있지만 실제 메모리처럼 빠르지 않다는 게 단점이다.
그래서 실제 운영환경에서 스왑 메모리를 사용하는 것은 좋은 방법이 아니며 실제 메모리에 올려 사용하는 방법을 지향하는 것이 좋다.
확인 방법
리눅스에서 Swap Memory를 확인하고 싶다면
free -h
위와 같은 명령어를 터미널에 입력한다면
이런 식으로 확인이 가능하다. 리눅스의 커널은 메모리에 올라와 있는 메모리 블록 중에서 지금 당장 쓰이지 않는 메모리 공간을 사용가능 한 메모리 영역으로 확보한다.
위 중에 buff/cache 부분은 커널의 성능 향상을 위한 캐시 중인 공간을 뜻한다.
그중에서 buff는 프로세스가 아닌 시스템 성능을 위한 커널이 사용 중인 공간을 말하고 cache는 페이지 캐시의 메모리이다.
페이지 캐시
cache에서 말한 페이지 캐시가 무엇일까?
페이지 캐시는 처리한 데이터들을 RAM에 저장하여 가지고 있다가 다시 이 데이터가 필요한 상황이 생긴다면 디스크에서 I/O 하는 것이 아닌 RAM에 저장 중인 데이터를 반환해 주는 공간을 말한다.
그러면 이 Swap Memory를 어디서 사용할 수 있을까?
AWS를 해보았다면 EC2 프리티어를 사용해 보았을 수 있다. 하지만 프리티어는 기본적으로 Swap Memory를 제공하지 않기 때문에 안 그래도 적은 메모리 공간에 애플리케이션을 띄우는 것은 한계가 있다. 그래서 프리티어를 사용하고자 하면 Swap Memory는 매우 좋은 방안이라고 생각이 든다.
위와는 다를 수 있지만 비슷할 것이다. 전체 메모리가 1GB밖에 되지 않아 애플리케이션을 띄우기는 힘들 것으로 보인다. 그래서 Swap Memory를 한번 설정해보자.
설정 방법
sudo dd if=/dev/zero of=/swapfile bs=128M count=16
이 명령어는 `/dev/zero`에 있는 파일은 입력대상으로 하여 `/swapfile`로 출력하고 128바이트로 작업하여 16블록만큼 복사하여 파일을 변환하겠다는 명령어이다. 일반적으로 Swap Memory를 설정할 때는 실제 Memory 공간의 2배 혹은 이상으로 설정한다.
sudo chmod 600 /swapfile
이제 변환한 파일에 읽기와 쓰기가 가능한 파일이라는 권한을 부여한다.
sudo mkswap /swapfile
그럼 파일을 가지고 `mkswap`을 사용하여 Swap Memory를 생성하면 된다.
// mkswap은 make swap의 약자
sudo swapon /swapfile
그리고 swap 공간에 파일을 추가하면 된다.
그러하면
이런 식으로 Swap Memory가 할당되어 사용할 수 있다.
하지만 EC2 프리티어에서 Swap Memory를 사용하기 위해 설정한 후 EC2가 종료되면 Swap 공간은 다시 사라지기 때문에 별도의 설정을 통해 EC2가 켜질 때마다 자동으로 활성화되도록 수정하면 된다.