라즈베리파이4 B 설치가이드(18) swap 사이즈 설정

Updated:

라즈베리파이에서 모자라는 메모리 사이즈를 확보하는 방법으로 swap 사이즈를 설정해보겠습니다. swap 파일의 원하는 위치와 사이즈로 변경하는 방법을 같이 살펴보겠습니다.

1. swap이란?

swap은 리눅스에서 기본 제공하는 메모리 관리 기법입니다. 메모리가 부족한 상황을 대비해서, DRAM 장치가 아닌 하드디스크와 같은 저장장치에 별도 사이즈를 swap 영역으로 설정해두고, 메모리 처럼 사용합니다. 즉, 리눅스는 DRAM이 모두 사용하게되면, 일부 사용중인 메모리를 swap 영역으로 복사합니다.(이를 swap out으로 표현합니다.) swap 영역으로 옮겨진 사이즈만큼 DRAM 메모리를 확보할 수 있게 되는 것이지요. 하지만, 저장장치(HDD,SSD)는 메모리 속도에 비하면 매우 느리다는 점은 swap의 한계점입니다.

2. 라즈베리파이 메모리와 swap

라즈베리파이4 B 모델은 메모리 용량이 DDR 1GB/2GB/4GB로 3가지 사이즈로 구성되어 있습니다. 4GB 메모리 기기가 아니라면 그리 넉넉한 메모리 사이즈는 아닙니다. 게다가 kodi 플레이어에서 GPU memory를 늘려주는 설정을 하면 가용 메모리는 더 떨어집니다. 이로인해 아래와같이 메모리가 모두 소비되어 메모리 할당이 되지 않는다는 메시지와함께 프로그램이 실행되지 않는 경우가 발생합니다.

Virtual memory exhausted: Cannot allocate memory

free 명령어로 DRAM 메모리와 swap 메모리의 사용현황을 확인할 수 있습니다. 아래와같이 라즈베리파이는 swap 메모리를 기본으로 설정되어 있고, 사이즈는 100MB 입니다.

pi@raspberrypi:~ $ free -h
              total        used        free      shared  buff/cache   available
Mem:          1.5Gi       218Mi       995Mi        49Mi       293Mi       1.1Gi
Swap:          99Mi          0B        99Mi

이 기본 설정을 원하는 사이즈로 변경해보록 하겠습니다.

3. swap 파일 위치와 사이즈 설정하기

라즈베리파이는 swap 영역을 파일(CONF_SWAPFILE)로 지정해서 사용합니다. /etc/dphys-swapfile 파일에서 swap 관련 설정을 변경할 수 있습니다. 설정파일 변경은 swap service 중지->설정파일 변경->swap service 시작 순으로 진행합니다. 아래 예시를 참고하세요.

pi@raspberrypi:~ $ sudo /etc/init.d/dphys-swapfile stop
[ ok ] Stopping dphys-swapfile (via systemctl): dphys-swapfile.service.
pi@raspberrypi:~ $ sudo vi /etc/dphys-swapfile

설정 파일(/etc/dphys-swapfile)에서 편집할 내용은 아래 2가지입니다. CONF_SWAPFILE은 swap 파일의 위치입니다. SD CARD는 flash memory 특성상 잦은 write 동작은 SD card의 수명을 단축시킵니다. 따라서 SSD/HDD를 사용한다면 swap 파일은 SSD/HDD 파티션에 지정하는 것이 좋습니다. CONF_SWAPSIZE는 1GB를 사용하면 충분합니다. 메모리 상태를 모니터링해서 부족하다면 더 늘려도 좋습니다.

CONF_SWAPFILE=/home/pi/ssd_storage/.swap/swap
CONF_SWAPSIZE=1024

설정 파일 편집을 마치고, swap service를 재시작합니다. 지정한 swap 파일 위치를 보면 1GB 사이즈 파일이 생성된 것을 확인할 수 있습니다.

pi@raspberrypi:~ $ sudo /etc/init.d/dphys-swapfile start
[ ok ] Starting dphys-swapfile (via systemctl): dphys-swapfile.service.

메모리 상태를 다시 확인해봅니다. 아래와같이 swap 영역의 total이 설정한 사이즈 대로 할당이 되어 있으면 설정은 성공입니다.

pi@raspberrypi:~ $ free -h
 free -h
              total        used        free      shared  buff/cache   available
Mem:          1.5Gi       222Mi       936Mi        49Mi       347Mi       1.1Gi
Swap:         1.0Gi          0B       1.0Gi

더 많은 라즈베리파이 이야기 Pi Guide 보러가기


Leave a Comment