Linux Swap file 만들기

HYEONG HWAN, MUN/ 3월 17, 2018/ 미분류/ 6 comments

https://blog.lael.be/post/6810

# 2023년에 맞추어 최신 내용으로 업데이트함

하드디스크 일부 영역을 메모리로 사용하는 것스왑(Swap) 이라고 한다. 과거, 메모리가 비싸던 시절에 흔하게 사용하던 방법이다. (요즘엔 사무용 PC도 고용량램을 사용하는 시대라서 스왑을 거의 사용 안함.)

대부분의 경우에 스왑을 설정할 필요는 없지만, 메모리가 낮은 시스템에서는 설정해 주는 것이 좋다.
메모리가 많은 시스템에서는 스왑을 설정해도 메모리가 많이 남기 때문에 스왑 영역을 사용하지 않는다.

HDD 환경에서 SWAP은 느리기 때문에 추천하지 않지만, SSD 환경에서 SWAP은 나름 쓸만하다.

 

여러개의 swapfile 을 동시에 사용할 수 있습니다. 1GB 의 swapon 상태에서, 2GB 의 swapfile 을 만들고 swapon 해주면, swap 은 3GB 가 됩니다. (그런데 보통 한개만 씀)

 

1. 빈 디스크 만들기

블럭사이즈가 1MB, 블럭 갯수가 2000K 인 빈파일을 만든다. (즉 2GB) 보라색 부분을 변경하여 용량을 변경할 수 있음.
(2000000 = 2GB, 4000000 = 4GB, 8000000 = 8GB)

# dd if=/dev/zero of=/root/swapfile bs=1k count=2000000 conv=excl

권한 설정 (예를들어 시스템 내의 다른 사용자가 스왑파일을 지운다면 문제가 발생할 것이다.)

# chmod 600 /root/swapfile

 

2. 스왑파일로 설정하기

# mkswap /root/swapfile

 

3. 스왑파일 켜기

# swapon /root/swapfile

 

(반대명령어) 스왑파일을 끄는 명령어는 다음과 같다.

# swapoff /root/swapfile

 

4. 메모리 확인

# free -m

기존에 메모리 1GB 서버에서, 이제는 2GB 를 추가하여, 3GB 서버가 되었다.

시스템의 최대 성능을 위해서 당연히 Memory 영역을 먼저 사용한다. (메모리는 SSD 보다 월등히 빠르니까!)

어느정도의 Memory 사용량이 차면, 시스템은 메모리에서 필요하지 않는 데이터를 비우는 작업을 한다. 그 이후에도 메모리 공간이 부족하여, 작업을 실행할 수 없다면 메모리 에러가 발생한다.

하지만 Swap 이 있는 경우에는 Swap 을 사용하기 시작한다.

어느 정도의 시간이 지난 후에 시스템에서 free -m 명령어를 통해 메모리를 확인했을 때, swap 을 많이 사용중이라면 메모리 증설을 고려해 보아야 한다. (일반적으로 swap 사용량은 0이거나 매우 적다.)

 

5. 재부팅시 스왑이 설정되도록 처리

세가지 방법을 설명합니다. 셋 중 하나의 방법을 선택하여 설정하세요.

 

1) rc.local 사용
# vi /etc/rc.local

swapon 관련 명령어 한줄 추가해 주면 된다.

 

2) crontab 을 사용

root 사용자 권한으로 로그인 한 다음,

# crontab -e
@reboot /sbin/swapon /root/swapfile

3) fstab 을 사용

root 사용자 권한으로 로그인 한 다음, 아래의 내용 추가.

# vi /etc/fstab
/root/swapfile swap swap auto 0 0

 

 

5. 재부팅 후 스왑이 정상적으로 처리되는지 확인

재부팅

# reboot

재부팅 후 메모리 사용량 확인.

# free -m

swap 공간이 설정되어 있으면 정상.

 

 

6. swap 적극성 제어 (swappiness)

이 작업은 필수는 아닙니다. swappiness 의 기본값은 60 입니다.

swappiness 값의 유효범위는 0 ~ 200 이며, 기본값은 60입니다.

일반적으로 swap 을 적게 사용하기를 원하기 때문에 swappiness 값은 10 ~ 60 으로 사용하는 편입니다.

 

* swappiness 을 0 으로 설정한다고 해서 스왑이 동작안한다거나 swappiness를 100으로 설정한다고 해서 스왑만 사용하는 것은 아닙니다.

기본적으로 리눅스 시스템의 커널의 안전 메모리 범위가 있습니다. 이것을 high watermark zone 이라고 부릅니다.
swappiness 를 0 으로 설정하면 스왑을 잘 사용 안하지만, 어느 한계가 넘어서면 스왑을 사용합니다.
swappiness 를 100 으로 설정하면 스왑을 50% 확률로 사용합니다. 이 적극성 확률은 메모리(또는 스왑) 사용량에 따라 구동중 계속 변화합니다. (기준값에 따라서)

자세한 내용은 리눅스 커널 가이드를 살펴보세요. : https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/admin-guide/sysctl/vm.rst?h=v6.1#n889

 

라엘이의 가이드

내 서버가 RAM 4GB 또는 그 이상이고 시스템 비상상황을 대비하기 위해서 스왑을 설정함 -> 10
내 서버가 RAM 1GB 이며, Light 하게 사용중. -> 60  (기본값. 바꿀 필요 없음)
내 서버가 RAM 1GB 이며, 웹서버 디비서버 여러개 구동중. -> 80

내 서버의 메모리가 얼마나 부족하는지에 따라 선택하면 된다.

 

만약 최대한 실제 메모리를 사용한 후, swap 을 사용하기를 원한다면 아래와 같이 입력하자.

echo vm.swappiness = 10 >> /etc/sysctl.conf
sysctl -w vm.swappiness=10

(/etc/sysctl.conf 에 vm.swappiness 이 있을 경우 수정. 기본적으로 vm.swappiness 설정 구문은 없다.)

 

기본값 60도 충분히 괜찮은 값이니까, 스왑적극성(swappiness)은 운영 중에 메모리 사용량 점검(free -m)을 해보면서 적절히 수정 하시길 바랍니다.

 


 

스왑 제거하는법

swap 켜는 구문 제거. (또는 cron 에서 제거)

/etc/rc.local 파일에서 swapon 관련 명령어 제거

swap 연결 해제.

# swapoff /root/swapfile

디스크 블럭 파일 삭제.

# rm /root/swapfile

 

 

6 Comments

  1. 안녕하세요 오랜만에 들렀습니다.
    좋은 정보입니다.
    제 서버는 램이 16인데
    가상머신들을 많이 돌리기 때문에
    조금 조금씩 램을 할당해 주고 있었는데

    유용한 정보입니다.
    마침 SSD도 사용하고 있어서 한번 시도해 보겠습니다.
    감사합니다.

    1. 램이 16기가면 굳이 필요 없긴합니다.
      현재 블로그를 아마존클라우드에서 돌리고 있는데, 제가 운영하는 서버로 옮길까 고민중입니다.

  2. 안녕하세요.

    스왑파일을 만든뒤, 재부팅할때 자동으로 스왑처리하는게,

    우분투 16.04 와 18.04 와 방식이 같나요?

    1. 네 동일합니다.

      재부팅할때 스왑처리하는 방법을 하나 더 추가하도록 하겠습니다.

      1. # crontab -e 명령으로 재부팅 해도 작동하지 않아서 고민하다가..

        @reboot sudo swapon /root/swapfile 로 성공했습니다. ^^

        참고로 저는 AWS Lightsail 유저 입니다.

        1. 아.. path 관련 문제였나보네요.

          @reboot /sbin/swapon /root/swapfile
          로 설정하면 될겁니다. 본문에 업데이트하였습니다.

Leave a Comment

작성하신 댓글은 관리자의 수동 승인 후 게시됩니다.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>
*
*