이번 미니 프로젝트를 진행하기 전에도 기존 배포에 사용하였던 ec2인스턴스가 있었지만 주기적으로 일주일마다 상태검사등으로 ec2인스턴스가 먹통이 되곤했었다.
그리고 이번 프로젝트를 진행하면서 아무런 행동도 하지 않아도 간헐적으로 cpu사용량이 99%를 찍으며 먹통이 되거나 CI/CD배포 시에도 cpu사용량이 99%를 찍으며 인스턴스가 먹통이 되어 정상적인 진행이 불가능 했었다.
그 이유를 찾아보니 프리티어로 할당받을 수 있는 ec2인스턴스의 유형은 t2.micro인데 t2.micro의 스펙은 2개의 vCPU 그리고 1GB의 메모리이다. 하지만 스프링 자체와 MySQL 그리고 CI/CD시 사용되는 메모리등이 1GB를 초과하여서 그런 형상이 발생하는것 같았다. 실제로 확인해본 결과는 아니지만 참조한 블로그에서는 t2.small인스턴스를 사용하였는데 매우 간단한 프로젝트였음에도 불구하고 사용 메모리가 1GB가 넘었다.
때문에 이에 대한 해결방안을 찾아보다가 스왑파일을 이용하여 2GB의 추가 메모리를 할당할 수 있다는 것을 알게되었다.
스왑파일을 설정하는 명령어를 차례대로 입력해주었다.(Ec2 우분투환경에서)
1. dd 명령을 사용하여 루트 파일 시스템에 스왑 파일을 생성합니다. 명령에서 bs는 블록 크기이고 count는 블록 수입니다. 스왑 파일의 크기는 dd 명령의 블록 크기 옵션에 블록 수 옵션을 곱한 값입니다. 이러한 값을 조정하여 원하는 스왑 파일 크기를 결정합니다.
지정한 블록 크기는 인스턴스에서 사용 가능한 메모리보다 작아야 합니다. 그렇지 않으면 "memory exhausted" 오류가 발생합니다.
이 예제 dd 명령에서 스왑 파일은 2GB(128MB x 16)입니다.
$ sudo dd if=/dev/zero of=/swapfile bs=128M count=32
2. 스왑 파일의 읽기 및 쓰기 권한을 업데이트합니다.
$ sudo chmod 600 /swapfile
3. Linux 스왑 영역을 설정합니다.
$ sudo mkswap /swapfile
4. 스왑 공간에 스왑 파일을 추가하여 스왑 파일을 즉시 사용할 수 있도록 합니다.
$ sudo swapon /swapfile
5. 프로시저가 성공적인지 확인합니다.
$ sudo swapon -s
6. /etc/fstab 파일을 편집하여 부팅 시 스왑 파일을 활성화합니다.
편집기에서 파일을 엽니다.
$ sudo vi /etc/fstab
파일 끝에 다음 줄을 새로 추가하고 파일을 저장한 다음 종료합니다.
/swapfile swap swap defaults 0 0
vim 편집기 사용법은 검색해보면 나오고 나의 경우 초기에 파일을 열면 위 두줄만 존재하는 상황이었고 "i"누르면 편집모드로 바뀌면서 좌측하단이 --INSERT--로 바뀌는 것을 확인할 수 있다.
이 상태에서 사진과 같이 타이핑을 해준뒤 "esc"를 툴러 편집모드를 종료한 후 ":"를 입력하면 좌측 하단에 명령어를 입력할 수 있으며 wq! 를 입력하고 엔터를 눌러 변경사항을 저장하고 종료할 수 있다.
vi /vim 편집기 명령어 정리 (단축키 모음 / 목록)
vi /vim 편집기 명령어 정리 (단축키 모음 / 목록) 리눅스의 대표적인 에디터인 vi 편집기의 명령어들에 대해서 정리해보았습니다. vi 시작 명령어 명령어 설명 예제 vi {파일명} 파일열기, 작성 vi tes
iamfreeman.tistory.com
탈출하고 우분투에서 free명령어를 입력하여 메모리 상태를 확인 할 수 있는데 기본 메모리 1GB와 Swap파일로 인한 2GB가 추가되었음을 확인 할 수 있다.
기존에 발생하였던 cpu가 갑자기 치솟는 현상이 메모리 부족현상인지 정확히는 알지 못하겠으니 나의 경우 위와같은 과정을 거쳐 메모리를 추가 시킨뒤 cpu가 99까지 치솟는 현상을 더이상 없었고 CI/CD배포시에만 최대 10%정도 사용하였고 대부분 1%대를 유지하였다.
참고 : https://repost.aws/ko/knowledge-center/ec2-memory-swap-file
'백엔드(Back End) > DevOps' 카테고리의 다른 글
[TIL]20230812 - Grafana와 Prometheus를 이용한 모니터링(1) (0) | 2023.08.15 |
---|---|
[TIL]20230811 - CloudWatch 로그 남기기 (0) | 2023.08.15 |
[TIL]20230719 - 트러블 슈팅 배포환경에서 S3 이미지 업로드 불가능 현상 (0) | 2023.07.19 |
[TIL]20230717 - Github Actions로 CI/CD 구축하기-(2) (0) | 2023.07.18 |
[TIL]20230715 - Github Actions로 CI/CD 구축하기-(1) (1) | 2023.07.15 |