개인 프로젝트를 EC2에 배포하는 CI/CD를 구현 중에 있었다.
그런데 이상하게 npm install을 하면 계속 멈춰버리고 중간에 timeout으로 죽어버리는 현상이 발생했다.
어떻게 이 현상을 해결했는지 알아보자.
참고로 stackoverflow에서 사용해보라고 하는 아래 방법을 시도해 봤지만, 난 해결되지 않았다.
- removing package-lock.json
- npm config set registry http://registry.npmjs.org/ --global
- npm cache verify
문제 원인: 프리티어 사용으로 인한 메모리 부족
원인은 메모리 부족에 있었다. 현재 개인 프로젝트를 띄우는 용도였기에, 프리티어 지원이 가능한 .micro 인스턴스를 사용하고 있었다.
제공되는 RAM은 1GB였고, RAM이 부족하여 npm install 등과 같은 작업이 제대로 작동하지 않았다.
물론, RAM을 충분히 제공하는 정책으로 업그레이드 하는 방법이 가장 이상적이겠지만, 프리티어를 최대한 유지하면서 해결하는 방법을 찾고 싶었다.
문제 해결: Swap Memory 설정
위 문제는 사양을 업그레이드하지 않고도, swap memory를 설정 해줌으로써 해결 할 수 있었다.
참고로, Swap Memory란 컴퓨터 시스템에서 RAM이 부족할 때 사용되는 보조 저장 장치이다.
Hard Disk에 위치하므로, RAM보다 느리다는 단점이 있고, 사실 현대에는 RAM 성능 향상으로 잘 쓰이지 않는 방법 이지만 뭐 어때 나는 우선 프리티어를 이용하면서 배포를 하고 싶었다! 😤
먼저 아래처럼 free -h 명령어를 통해 현재 가용 메모리와 혹시 Swap Memory가 잡혀있는지 확인해보자.
위 사진을 보면 현재 Swap 메모리가 0B로 잡혀있는 것을 확인할 수 있다.
EC2에서 Swap Memory를 설정하는 방법은 aws 홈페이지를 참고하였다.
참고로, 내가 이용하고 있는 EC2는 ubuntu 환경이므로, 아래 명령어는 EC2환경에 따라 조금씩 달라질 수 있다.
아래 명령어에서는 Swap Memory를 2GB로 잡고 있는데,
우선 RedHat에서 2GB 미만의 램들은 램크기의 2배로 잡아주라고 하였기에 아래처럼 설정하였다.(참고링크)
fallocate -l 2G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
swapon --show
free -h
// 리부트 해도 제시동 되도록 설정
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
위 명령어를 통해 아래처럼 이제 Swap Memory가 잡혀있는 모습을 확인 할 수 있었다.
위 처럼 설정 한 이후에 다시 npm ci를 진행하니, 정상적으로 동작하는 모습을 확인할 수 있었다.
그치만, 다음에 이런 상황이 오면 그냥 scale up 해버려야겠다 😂
'CI CD' 카테고리의 다른 글
[AWS] CodeDeploy 설정 및 생성(feat. Deploy 역할 생성) (0) | 2023.12.10 |
---|---|
[AWS] IAM 역할 생성(EC2에 IAM 역할 부여) (0) | 2023.12.10 |
[AWS] S3 시작하기 (0) | 2023.12.10 |
[AWS] nginx를 이용한 포트 포워딩(feat. 멀티 포트포워딩) (0) | 2023.12.10 |
[AWS] EC2 서비스 시작하기 (0) | 2023.09.13 |