프로젝트 배포에 AWS 프리티어 EC2를 사용했는데 배포가 간혹 멈추는 현상이 있었다. 에러로그를 살펴보니 다음과 같은 에러가 있었다.
Client_loop: send disconnect: Broken pipe
EC2의 CPU 사용률을 모니터링해보니 멈추는 현상이 있을 때 다음처럼 CPU 사용률이 급격히 증가하는 것을 확인할 수 있었다. 프리티어 EC2에서 기본적으로 제공하는 CPU는 1GB인데 이 것을 늘리기 위해 방법을 찾아보았다.
AWS 공식 홈페이지에서 해결 방법을 찾았다.
https://aws.amazon.com/ko/premiumsupport/knowledge-center/ec2-memory-swap-file/
Swap 메모리 할당
sudo dd if=/dev/zero of=/swapfile bs=128M count=16
읽기, 쓰기 권한 부여
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
이 방법으로 CPU의 용량을 1GB에서 3GB로 업그레이드 했더니 같은 에러는 발생하지 않았다. 전에 했던 프로젝트는 이런 에러가 발생하지 않았는데 WebSocket을 사용해서 CPU 부하량이 많았던 프로젝트라 그랬던 것이라 생각한다. 그래서 CPU의 부하를 최대한 줄이기 위해 In-Memory DB인 Redis로 구현했던 랭킹시스템도 RDS에서 구현하는 것으로 변경했다.