EC2에서 npm run build를 하던 도중 heap out of memory에러가 발생
const used = process.memoryUsage();
console.log(`메모리 사용량: ${Math.round(used.rss / 1024 / 1024)}MB`);
main.ts에 해당 코드를 작성 후 사용 메모리를 봤는데 123mb로 512mb보다 한참 떨어지는데 왜 저런 오류가 날까 해서 구글링 해보니 일단 build하는 과정 중에 node.js에서 사용할 수 있는 메모리양을 넘어서 그렇다는 이유, 또 t2.micro는 사용할 수 있는 기본 용량이 1gb라 swap메모리를 사용해야 한다 하여 둘 다 적용하였음
$ node -e 'console.log(v8.getHeapStatistics().heap_size_limit/(1024*1024))'
-> 499.25
500mb를 2048mb로 늘려주고
$ export NODE_OPTIONS=--max_old_space_size=2048
dd if=/dev/zero of=/swap-file bs=1k count=2048000
swapfile을 생성해주고
dd : 크기를 가진 파일을 만드는 명령
if : 초기화할 때 사용하는 장치 파일명
of : 생성할 파일명
bs : 블록크기 지정 (단위없을 경우 : 바이트 처리)
count : bs에 설정한 블록의 개수
-> 위 명령어대로라면, 현재위치에 swap-file이라는 이름의 2GB를 가진 파일이 하나 만들어진다.
읽기쓰기 권한 설정을 해줌
sudo chmod 600 /swapfile
swap-file을 저장할 공간을 생성해주고
sudo mkswap /swapfile
// vi에디터를 열어 줌
sudo vi /etc/fstab
// 파일의 맨 끝 다음줄에 아래의 명령어를 작성하여 ec2 서버가 꺼져도 활성화 될 수 있도록 함
/swapfile swap swap defaults 0 0
ubuntu에서 정상적으로 build가 되고 있으나 git action에서 같은 오류가 발생하였음
name : Build and Deploy to EC2
on:
push:
branches: ["main"]
pull_request:
branches: ["main"]
jobs:
AUTO_DEPLOY:
runs-on: ubuntu-latest
steps:
- name: Check out code
uses: actions/checkout@v2
- name: Setup Node.js
uses: actions/setup-node@v2
with:
node-version: '16'
- name: Run scripts in server
uses: appleboy/ssh-action@master
with:
host: ${{secrets.HOST }}
username: ${{secrets.USERNAME }}
password: ${{secrets.PASSWORD }}
port: ${{secrets.PORT }}
timeout: 40s
script: ${{secrets.SCRIPT }}