되자!백엔드개발자
[ERROR] AWS 인스턴스 인스턴스 상태검사 오류 해결 본문
AWS 상태검사 1/2 실패
현재 GitHub와 AWS EC2 사이에 CI/CD 파이프라인을 구축해서 프로젝트를 진행 중이다.
의도했던대로 프로젝트를 push할 때마다 서버에 제대로 올라가긴 하는데
이틀에 한번 꼴로 아래와 같이 상태 검사를 실패하며 서버에 무한 로딩이 걸리기 시작했다.
이러한 경우 인스턴스를 중지 -> 재실행 하면 해결되는 문제긴 했다.
하지만 너무 자주 오류가 나기도 하고 다른 팀원들이 AWS 서버에 올린 프로젝트로 테스트 할 때 오류가 나버리면
내가 해결해주지 않는 이상 이도 저도 못하게 되기 때문에 다른 해결책을 강구해야만 했다.
해결 방안 찾는 여정
먼저 AWS 공식 문서를 통해 이러한 에러가 발생하는 경우를 찾아보았다.
연결할 수 없는 EC2 Linux 인스턴스의 상태 확인 실패 문제 해결
Amazon Elastic Compute Cloud(Amazon EC2) Linux 인스턴스에 연결할 수 없어 상태 확인 중 하나 또는 둘 다에 실패합니다.
repost.aws
인스턴스 상태 확인 실패는 아래와 같은 문제가 있을 때 발생한다고 한다.
- 운영 체제 부팅 실패
- 올바른 볼륨 탑재 실패
- CPU 및 메모리 소진
- 커널 패닉
- 네트워크가 작동하지 않음
이러한 오류가 발생했는지 확인하기 위해 EC2의 시스템로그를 살펴보았다.
위에 올린 공식문서 링크에 가면 해당 오류가 발생할 때 시스템 로그에 어떻게 나오는지에 대해 자세히 나와있다.
하지만 나의 경우 부합하는 시스템 로그가 존재하지 않았다.
[[0;32m OK [0m] Reached target [0;1;39mLogin Prompts[0m.
Starting [0;1;39mGRUB failed boot detection[0m...
[[0;32m OK [0m] Finished [0;1;39mGRUB failed boot detection[0m.
[[0;32m OK [0m] Started [0;1;39mLSB: automatic crash report generation[0m.
[[0;32m OK [0m] Started [0;1;39mAccounts Service[0m.
공식문서에 나온 에러는 없었지만 로그에 실패와 관련된 error, fail 등을 검색해보았는데
위와 같이 failed가 나와있긴 하다.
열심히 구글링해보았더니 나와 같은 문제를 겪은 분을 발견했고 답변해주신 분이 RAM부족이 발생했을때 같은 에러가 발생한 적이 있다고 답변해주셨다.
그러고보니 공식문서에 CPU 및 메모리 소진 일 때 문제가 발생할 수 있다고 했었었다.
EC2에 가서 CPU의 사용률을 확인해보았는데 아래와 같이 99%로 치솟는 순간이 존재한다.
(한국 시간대랑 맞진 않는데 이는 나중에 수정했다.)
수정 방법
sudo rm /etc/localtime
sudo ln -s /usr/share/zoneinfo/Asia/Seoul /etc/localtime
# 타임존 변경확인
date

시간대가 다르게 나와서 긴가민가 하지만 CPU 사용율이 치솟던 저 시즘에 에러가 나지 않았을까
아무튼 애플리케이션의 메모리가 ec2 스펙보다 높아서 발생한 문제라고 원인 상정하고 해결방안을 모색해보았다.
SWAP 파일 생성
현재 나는 AWS EC2 30GB SSD와 1GB메모리를 사용하고 있다.
SSD는 그럭저럭인데 메모리가 문제였다.
기본 서버 OS가 돌아가는데 메모리가 500MB가까이 사용되어서
작은 프로그램이 돌아가더라도 서버가 뻗어버리게 되던 것.
추가금을 지불하고 auto-scale을 사용할 수 있으나 나는 거지 대학생이자 취준생이므로
차선책인 SWAP 메모리를 사용하기로 했다.
SWAP 메모리란?
swap 메모리는 리눅스에서 swap 공간을 사용하는 메모리를 의미한다.
만약 OS에서 메모리를 full로 사용하고 있다면, 사용하지 않는 메모리 안의 페이지를 하드 드라이브에 저장하게 되는데, 이게 swap 메모리의 기본 개념이다.
운영체제 공부할 때 봤었던 기억이 있는데 이렇게 나올 줄은...
아무튼! 메모리를 100% 대체할 수는 없지만 대체제로 사용되는 메모리라고 하니
아래 명령어로 설정해보자
// swap 메모리 할당 -- RAM의 용량에 따라 달라지는데 나는 1GB이므로 2GB를 할당
sudo dd if=/dev/zero of=/swapfile bs=128M count=16
// swap file read/write 권한 변경
sudo chmod 600 /swapfile
// linux swapfile 을 사용해서 영역을 설정
sudo mkswap /swapfile
// swap sapce에 swap file 추가
sudo swapon /swapfile
// 추가된 swap 영역 확인
sudo swapon -s
// 서버를 리부트 할 때 swap을 자동 활성화하기 위한 명령
sudo vi /etc/fstab
/swapfile swap swap defaults 0 0
마치고 나면 아래와 같이 swap 메모리가 활성화 된 것을 볼 수 있다.
이제 서버가 죽는지 안죽는지 기다리는 일만 남았다. 제발 해결되라!!
'개발공부 > ERROR' 카테고리의 다른 글
[ERROR] Mock 테스트 중 HttpMessageNotReadableException에러(400에러) (0) | 2023.08.05 |
---|---|
[ERROR] GitHub Action '*/gredlew' is not executable. 에러 (0) | 2023.07.13 |
[ERROR] Jackson 직렬화 중 class 못찾는 문제 (0) | 2023.06.30 |
[ERROR] Docker ps, build 등 여러 명령이 실행이 안되는 에러 (0) | 2023.06.28 |
[JavaScript] Post방식으로 int 값을 null로 보내면 error발생 (0) | 2023.02.23 |