[AWS] EC2 프리티어 환경에서 마주할 수 있는 이슈 ( 메모리 부족 )

장택진·2023년 7월 14일
0

AWS

목록 보기
3/3

npm run build 시에 메모리 부족으로 build를 실패했다.

프리티어의 가장 큰 단점은 RAM이 1G 라는 것인데 그게 뭔 상관일까 ?

  • 서버 메모리가 부족해서 빌드하다가 메모리에 과부하가 걸림
    -> RAM은 실행중인 픅로그램의 속도와 실행에 관련이 있다.
    만약 프로그램이 잡아먹는 RAM이 컴퓨터(우분투 환경)의 RAM 크기를 초과해버린다면 프로그램이 느려지거나, 실행이 안될 수 있다.

그렇다면 해결방법은 ?

  • package.json에서 빌드 명령어 변경
  • Swap file을 사용하여 Amazon EC2 인스턴스에서 스왑 공간으로 사용할 메모리를 할당

package.json에서 빌드 명령어 변경

프로젝트의 빌드 명령어를 변경해주는 것이다.
예시로 들자면 이런식이다.

before

{...
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  },
...
}

after

{...
  "scripts": {
    "start": "react-scripts start",
    //"build": "set \"GENERATE_SOURCEMAP=false\" && react-scripts build",// 윈도우
      "build" : "GENERATE_SOURCEMAP=false react-scripts build",// 리눅스
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  },
...
}

GENERATE_SOURCEMAP=false 코드를 추가했다.
빌드 후에 빌드 파일에 대한 소스 코드를 확인할 수 있도록 해주는 코드다.

default 값이 true 라서 이를 false로 바꿔준 것.

true면 뭐가 어떻고 false면 뭐가 어떤데 ?

  • true 라면 버그가 발생했을 때 빌드파일을 통해 소스 코드를 확인할 수 있기 때문에 어떤 문제가 있는 확인할 수 있다.
    - 그렇다는건 디버깅 정보를 포함하여 빌드하기 때문에 빌드 용량이 커지며, 메모리 부족을 초래한다.
  • false면 빌드 용량이 작아지고 메모리를 덜 사용하게 된다.

Swap file을 사용하여 Amazon EC2 인스턴스에서 스왑 공간으로 사용할 메모리를 할당

이상한 단어가 껴있어서 거부감이 들 수 있지만 메모리 부족 현상이 있을 때 디스크의 램을 끌어와 사용한다는 뜻이다.

aws 공식 문서에도 자세히 설명이 되어 있다. 바로가기

차근차근 따라가보자

  • 일단 dd 명령어를 통해 swap 메모리를 할당
    sudo dd if=/dev/zero of=/swapfile bs=128M count=16

    128씩 16개의 공간을 만드는 것이여서 우리의 경우 count를 16으로 할당하는 것이 좋다. 즉, 2GB정도 차지하는 것이다.

  • 스왑 파일에 대한 읽기 및 쓰기 권한을 업데이트
    $ sudo chmod 600 /swapfile
  • Linux 스왑 영역을 설정
    $ sudo mkswap /swapfile
  • 스왑 공간에 스왑 파일을 추가하여 스왑 파일을 즉시 사용할 수 있도록 만듦
    $ sudo swapon /swapfile
  • 절차가 성공했는지 확인
    $ sudo swapon -s
  • /etc/fstab 파일을 편집하여 부팅 시 스왑 파일을 활성화
    편집기에서 파일을 엽니다.
    $ sudo vi /etc/fstab

  • 파일 끝에 다음 줄을 새로 추가하고 파일을 저장한 다음 종료
    /swapfile swap swap defaults 0 0

다음과 같이 적용됬는지 확인 !

total       used       free     shared    buffers     cached
Mem:       1009136     941624      67512          4      11696      96836
-/+ buffers/cache:     833092     176044
Swap:      2097148     304972    1792176

이렇게 하면 build가 되긴 된다. 비록 HDD에 할당하기 때문에, RAM에 비해 속도는 현저히 낮아지지만 가난한 우리에겐 한줄기 빛일 뿐 ㅎ

profile
필요한 것은 노력과 선택과 치킨

0개의 댓글