2022. 3. 29. 14:36ㆍBack-end/Spring
요즘 항해99 실전프로젝트 기간이라 많은 삽질을 경험하느라 새벽 6~7에 자는게 습관이 되었다. 그래서 최소 12시까지는 자다가 깨는데, 그전에 카톡의 알람을 살짝 확인만 하고 다시 자려고 했었는데.... 그런데!!! 백앤드 서버가 꺼졌다는 카톡이였다!!!! 울조 세명중 현재 스프링 서버를 맡고있는 건 나 아닌가!!! (배포자동화와 무중단배포를 전담하여서...ㅜㅜ)
그말은 즉 잠자리에서 바로 일어나야한다는 말이다! nginx 로 8081, 8082 두 포트가 nohup으로 돌려져 있었는데 무슨상황인지 ubuntu로 접속해보았더니 ec2에 접속이 되지 않는다... 이런 상황은 처음이라 당황스럽다;;;
AWS에 접속하여 ec2 인스턴스를 확인해보니 인스턴스의 상태는 실행중이지만...
상태검사에 2/2개 검사 통과가 -> 1/2개 검사통과로 바뀌어 있고 노란색으로 변해있었다... (헉! 이게뭐지?)
ec2 인스턴스를 중지 후 다시 시작을 해 바뀐 IP 주소를 도메인 사이트에서 바꾸고, 다시 서버를 재가동 하였다.
프리티어의 한계인건가...
그런데 인스턴스를 중지하거나 재시작하면 퍼블릭 IPv4 주소가 바뀌어 버린다.
그말은 즉 도메인을 구매했던 사이트에 가서 바뀐 주소로 다시 매핑해야한다는 번거러운 과정을 해야한다는 것이다.
그러고 부터 또 하루뒤... (꼭 새벽에 꺼진다...)
다시 똑같은 상황이 발생하였다!!!
이건 고쳐야 한다!!!
첫번째 시도할 방법
일단 밑에 블로그를 보고 따라서 바꾸어 놓았다. 일단은 이걸로 고쳐지기를 ...
https://donghunee.github.io/study/2020/01/02/nginx/
[Nginx] upstream timed out 해결 방법
앱잼을 하면서 간혹가다 502에러가 뜰 때가 있었다..
donghunee.github.io
upstream timed out (110: Connection timed out) while reading response header from upstream 에러가 떴었는데 프록시 서버에서의 읽는 시간과 연결 시간이 너무 짧게 설정되어 있어 그런것 같았다.
location / {
proxy_read_timeout 300s;
proxy_connect_timeout 75s;
}
일단 sudo vi /etc/nginx/sites-enabled/default 로 들어가서 location에다가
proxy_read_timeout 300s;
proxy_connect_timeout 75s;
위 설정을 추가해 주었다!
일단 처방을 하였으니 경과를 지켜보겠다... 당장 확인 해볼 방도가 없으니...
일단...서버야...제발 꺼지지마라...
힘내!!!
두번째 시도할 방법
위의 첫번째 시도를 점심 때쯤 한 후 새벽 1~2시에 오늘은 일찍 침소에 누워 건강을 챙기자는 생각으로 자기 전 마지막 의식으로 Postman을 이용하여 POST 요청을 보내보았다.
그런데...
어라?
버퍼링처럼 바가 움직임을 멈추지 않고 좌우로 왔다갔다만 하고있다...
Gitbash로 ubuntu 서버에 접속을 하려했으나 작동이 안되고 엄청~~~~~느리다!
이런... 불길하다!!!!
FileZilla로 error 로그좀 보려했더니 FileZilla도 먹통이였다.
AWS EC2를 봐보니 이건 아직 멀쩡했다. 하지만 상황이 전혀 멀쩡하지 않아서 중지 시킨 뒤 다시 시작을 하였다.
당연히 바뀐 IP로 다시 바꿔주는 작업을 하였다.
최대한 빨리 서버를 재개장 시킨 뒤 두번째 방법으로 들어갔다!
아래의 두 블로그를 참고하였다.
https://okky.kr/article/884329
OKKY | AWS EC2 프리티어 쓰시는분들 참고하세요!
일기장에 기록해둔건데 프리티어 쓰시는 분들에겐 좋은 정보일것 같아 남깁니다. 제 일기장에서 긁어온거라 폼이 많이 깨지긴 했는데 감안하고 봐주세요! AWS 프리티어 EC2를 사용 중 겪은 문
okky.kr
https://sundries-in-myidea.tistory.com/102
AWS EC2 프리티어에서 메모리 부족현상 해결방법
AWS free tier를 사용하다보면 2%가 부족할 때가 있다. AWS 프리티어는 가난한 대학생에게는 한줄기 빛과 같은 존재인데, AWS의 프리티어라서 적게 돈이 나가는 것도 좋고, 실제로 이것저것 해볼 수 있
sundries-in-myidea.tistory.com
ubuntu에서 free를 쳐보면 메모리 사용량을 알 수가 있다.
free를 쳐보니...
가관이다...
total used free shared buff/cache available
Mem: 997492 703832 68464 640 225196 147648
보면 total이 EC2 프리티어 메모리인 1GB이다.
그리고 free의 수치를 보면 10% 이하의 메모리가 남은 걸 알 수 있다. (이러니...멈출 수 밖에...ㅜㅜ)
해결방법은 간단하다. 부족한 메모리를 늘리는 것이다!
그럼 스왑이라는 것을 통해 메모리를 늘려보자!
그런데 스왑이 뭐지?
리눅스는 하드디스크를 가상 메모리로 전환시켜 사용할 수 있고 이를 스와핑(Swapping)이라고 한다.
그리고 AWS에서는 메모리의 양에 따라 스왑 메모리의 크기를 아래와 같이 권장하고 있다.
물리적 RAM의 양 | 권장 스왑 공간 |
RAM 2GB 이하 | RAM 용량의 2배(최소 32MB) |
RAM 2GB 초과, 32GB 미만 | 4GB + (RAM – 2GB) |
RAM 32GB 이상 | RAM 용량의 1배 |
참고: 스왑 공간은 절대로 32MB 미만이 되지 않아야 한다.
스왑 파일 생성
$ sudo dd if=/dev/zero of=/swapfile bs=128M count=16
1. dd 명령을 사용하여 루트 파일 시스템에 스왑 파일을 생성한다.
명령에서 bs는 블록 크기이고 count는 블록 수이다.
지정한 블록 크기는 인스턴스에서 사용 가능한 메모리보다 작아야 한다.
그렇지 않으면 memory exhausted 오류가 발생한다.
프리티어의 메모리는 1GB이니, 권장사항대로라면 2GB를 증설시켜야 한다.
이 예제 dd 명령에서 스왑 파일은 2GB(128MB x 16 = 2,048MB)이다.
$ sudo chmod 600 /swapfile
2. 스왑 파일에 대한 읽기 및 쓰기 권한을 업데이트
$ sudo mkswap /swapfile
3. Linux 스왑 영역을 설정
$ sudo swapon /swapfile
4. 스왑 공간에 스왑 파일을 추가하여 스왑 파일을 즉시 사용할 수 있도록 만든다
$ sudo swapon -s
5. 절차가 성공했는지 확인
$ sudo vi /etc/fstab
6. /etc/fstab 파일을 편집하여 부팅 시 스왑 파일을 활성화.
/swapfile swap swap defaults 0 0
첫번째 줄은 놔두고 두번째 줄에 위 문장을 새로 추가하고 파일을 저장한 다음 종료한다.
편집시 'a'를 누르면 편집을 시작하고, 'Esc'로 편집을 종료한 뒤, 파일을 저장할 때는 ':wq'를 누른뒤 엔터를 치면된다.
저장안하고 그냥 나갈 시에는 ':qa' 또는 ':q!'를 쳐서 나가면 된다.
7. free를 다시 입력하여 메모리를 확인해본다.
total used free shared buff/cache available
Mem: 997492 703832 68464 640 225196 147648
Swap: 2097148 7936 2089212
대박... Mem 밑에 Swap 한줄이 생겼다.
EC2 메모리가 1GB에서 2GB가 늘어나 총 3GB가 되었다...
오늘은!
서버 걱정없이 푹 잘 수 있을 것 같다...ㅜㅜ
그런데...
만약! 이래도 서버가 멈춘다면!
걱정마시라!
3번째 방법을 들고 다시 돌아오겠다...(설마...)
'Back-end > Spring' 카테고리의 다른 글
하드코딩을 피하기! (상수 사용, StringBuilder 사용) (0) | 2022.03.30 |
---|---|
[ubuntu] nginx let's encrypt로 https 적용시키기 (0) | 2022.03.30 |
무중단배포 & 배포자동화(Github Actions + CodeDeploy + Nginx) (0) | 2022.03.22 |
@RequiredArgsConstructor (0) | 2022.02.13 |
Spring : 게시판 : 내림차순 : 최신순으로 하는 법 (0) | 2022.01.25 |