본문 바로가기

DevOps

AWS EC2 npm build 퍼센트 안 넘어갈 때, 멈출 때

EC2에서 npm build를 하다 보면 18%, 25%쯤에서 멈춰버릴 때가 있다. Building for production... 이 계속 떠 있으면서..

처음엔 EC2가 많이 느리구나~ 하하! 하면서 기다렸는데 20분 30분이 지나도 안 끝나서 멈춰버렸음을 깨달았다. 한 두 번은 ssh 재접속하고 EC2를 재부팅 하면서 해결했는데 build 할 때 마다 조마조마하고 아예 계속 멈춰버리기 시작하면서 원인을 알아보았다.

AWS EC2 프리티어를 쓰는 경우 t2.micro를 사용하는데 이건 RAM이 1GB밖에 안 된다고 한다. 그래서 빌드 규모가 조금만 커져도 멈춰버리는 거라고 한다. 우테코 플젝할 때는 더 좋은 EC2를 써서 안 멈췄던 것임을 깨달았다.

해결 방법은 [React] Creating an optimized production build... 멈춤 현상 해결 방법
이 글을 통해 알 수 있었다. 두 가지 방법을 제시하는데 그중 두 번째 방법으로 해결했다.

앞서 설명했듯이 t2.micro은 RAM이 1GB로 매우 부족한 데, 이 부족한 부분을 디스크의 일부를 대신 사용하도록 설정해줌 으로써 해결하는 방법이다. 이를 메모리 스왑이라고 한다.

  1. sudo dd if=/dev/zero of=/mnt/swapfile bs=1M count=2048
  2. sudo mkswap /mnt/swapfile
  3. sudo swapon /mnt/swapfile

위 세 개의 명령어를 순서대로 입력하면 스왑 메모리가 생성된다. 이렇게 해주면 스왑 메모리가 2GB 잡혀서 메모리 부족으로 빌드가 멈추는 현상은 사라지지만, 디스크는 RAM 보다 훨씬 속도가 느리기 때문에 서비스에 퍼포먼스 문제가 발생할 수 있다고 한다. 그래서 이 방법은 임시방편으로 쓰고 사양을 올려야 한다.

EC2 사양을 올렸다면

  1. sudo swapoff -v /mnt/swapfile
  2. sudo rm /mnt/swapfile

위 두 개의 명령어로 스왑 메모리를 해제할 수 있다.

자세한 설명은 첨부한 블로그글에서 확인해보면 좋을 듯하다.

'DevOps' 카테고리의 다른 글

CI, CD, jenkins  (2) 2020.07.23
AWS 용어 정리  (1) 2020.06.24
AWS EC2 서버에서 SSH로 MySql 접속이 안될 때(Window)  (0) 2020.03.10
PuTTY로 AWS EC2 인스턴스에 접근이 안될 때  (2) 2020.03.10