들어가기 전

EC2 프리티어에서는 메모리를 1GB만 지원을 해주고 있습니다. 필자 또한 프리티어를 사용해서 메모리 문제를 직면하여 EC2에 띄워놓았던 젠킨스의 실행 속도가 너무 느리거나 멈추는 현상을 겪었습니다. 해당 포스팅에서는 이 문제에 대해 해결하는 방법에 대해 설명하겠습니다.

문제를 해결하는 방법에 대해 알기 전에 스왑 메모리(Swap Memory)에 대해 먼저 알아보겠습니다.

 

 

스왑 메모리

스왑 메모리란 실제 메모리가 가득 찼지만  더 많은 메모리를 사용해야 될 때 디스크 공간을 빌려와 메모리를 사용할 수 있는 가상 메모리를 의미합니다.

리눅스 커널은 실제 메모리에 올라와 있는 메모리 블록들 중 당장 쓰이지 않는 것을 디스크에 저장함으로써 자동으로 사용 가능한 메모리 영역을 늘립니다.

하지만 스왑 메모리의 경우 그 크기를 리눅스 커널처럼 자동으로  조절할 수 없기 때문에 하드 디스크의 공간을 항상 차지를 하여 하드 디스크까지의 접근 시간이 추가되기 때문에 실제 메모리(RAM)에 비해 속도의 성능이 떨어질 수 있습니다.

 

 

 

Swap in, Swap Out

 

Swap in실제 메모리(RAM)가 가득 차서 더 이상 프로그램과 데이터를 수용할 수 없을 때, 하드 디스크의 스왑 영역에 있는 데이터를 메모리로 가져오는 과정을 말합니다.

Swap out메모리 내의 데이터 중 일부를 하드 디스크의 스왑 영역으로 이동시키는 것을 의미합니다. 이것은 메모리가 부족할 때 운영 체제가 비활성화된 프로세스의 데이터를 스왑 영역으로 옮겨서 더 많은 공간을 확보하는 데 사용됩니다.

이 둘을 묶어 스와핑이라고 합니다.

 

이제 스왑 메모리를 이용하여 EC2 프리티어에서 발생하는 메모리 문제를 해결하는 방법에 대해 알아보겠습니다.

 

1.  Swap 파일 생성 및 가상 메모리 크기 설정

sudo dd if=/dev/zero of=/swapfile bs=128M count=16
  • dd : 블록 단위로 파일을 복사하거나 파일 변환
  • if : 지정한 파일을 입력대상으로 설정
  • of : 지정한 파일을 출력대상으로 설정
  • bs : 한 번에 읽고 쓸 최대 바이트 크기 지정
  • count : 지정한 블록 수만큼 복사

스왑 파일의 크기는 bs(128) x count(16)가 됩니다.  필자는 2.1GB 스왑 파일을 생성하였습니다.

 

 

2.  스왑 파일 권한 변경

sudo chmod 600 /swapfile

 

3. 앞에서 만든 파일을 스왑 파일로 설정 및 활성화

 

만약 swap 메모리를 비활성화하고 싶다면 아래 명령어를 사용하면 됩니다.

sudo swapoff {스왑파일경로}
sudo swapon -s //활성화 여부 확인

 

 

4. EC2 인스턴스가 재부팅이 될 때 스왑 파일을 사용할 수 있도록 설정

 

sudo vi /etc/fstab

/swapfile swap swap defaults 0 0 // <- 입력

 

 

 

메모리 사용량 확인하는 방법

Swap 메모리를 사용 안 했을 때 

 

free -h

 

 

htop

 

 

 

 

Swap 메모리를 사용했을때

 

free -h

 

 

htop

 

 

 

free -h