Amazon linux: swap 공간 만들기

AWS EC2 인스턴스에서 spring boot 실행 중 메모리 부족으로 인한 에러가 발생했다.

$./gradlew build jar
$./gradlew bootrun

AWS EC2 인스턴스에서 gradlew로 build후 bootrun으로 spring-boot를 실행했을 때 아래와 같은 에러가 발생하였다.

OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x00007f3a357c0000, 65536, 1) failed; error=’메모리를 할당할 수 없습니다’ (errno=12)

말 그대로 메모리 공간이 부족하다.

돈이 없는 나는 프리티어로 EC2 인스턴스를 생성하였고, 메모리는 1기가이기 때문이다.

(docker로 mysql을 실행하고, spring boot 실행만 했는데도 메모리가 부족하다)

우리는 돈이 없으니까 SWAP 공간을 설정해서 부족한 메모리를 메꾸자 ㅠㅠ

Swap이란?

리눅스에서 물리적 메모리(RAM)의 용량이 가득 차게될 경우 사용되는 여유 공간을 말합니다.

즉, 시스템이 처리하고 있는 데이터를 저장할 RAM이 충분하지 않을 때 스왑 공간에 이 데이터를 기록한다는 말입니다.

스왑 공간은 소량의 RAM을 사용하는 시스템에서는 도움이 되지만, RAM에 대한 대체로 여겨져서는 안됩니다.

스왑 공간은 하드 드라이브 상에 위치하기 때문에 물리적 메모리에 접근하는 것보다 접근 속도가 훨씬 느립니다.

돈이 없는 나는 물리적 메모리를 늘릴 수 없기 때문에, SWAP 공간을 설정하였다.

  • 현재 swap 공간 확인

    $ free -h
    

    img


  • SWAP 파일을 생성 (크기는 1.5 ~ 2배정도로 설정하는 것을 권장)

    $ touch /var/spool/swap/swapfile 
    $ dd if=/dev/zero of=/var/spool/swap/swapfile count=2048000 bs=1024
    


  • 시스템에서 접근 가능하도록 600 권한을 준다. (파일 소유권은 root:root(chown root:root)

    $ chmod 600 /var/spool/swap/swapfile
    


  • 파일 포맷을 SWAP으로 변환 후 SWAP file등록

    $ mkswap /var/spool/swap/swapfile
    $ swapon /var/spool/swap/swapfile
    


  • 파일시스템테이블(/etc/fstab)에 등록

    $ vi /etc/fstab
    #
    # /etc/fstab
    # Created by anaconda on Tue Jun 18 17:03:37 2019
    #
    # Accessible filesystems, by reference, are maintained under '/dev/disk/'.
    # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
    #
    # After editing this file, run 'systemctl daemon-reload' to update systemd
    # units generated from this file.
    #
    
    #추가
    /var/spool/swap/swapfile    none    swap    defaults    0 0
    


  • SWAP파일이 정상적으로 등록되었는지 확인

    $ free -h