티스토리 뷰

반응형

이상하게 DDD 동아리 프로젝트 서버가 종종 죽는 상황이 발견되었다.

꽤 오래전부터 식별되었던 문제였는데, 초반에는 그냥 죽을 때마다 재부팅하는 식으로 해결하다가 원천 해결을 해야겠다고 생각해서 조사를 하기 시작했다.

 

# 문제 최초 식별 (22년 11월 후순)

CI/CD 배포 실패 및 EC2 상태검사 실패

원인 : CI/CD 배포 과정에서 기존 프로세스를 죽이지 않고 새로운 프로세스를 실행해서 서버 자원 부족으로 인한 다운

해결 : 기존 프로세스를 확실하게 죽이도록 설정

 

일단 중복 프로세스로 인한 다운은 해결 됐으나, 다른 문제로 계속 다운 발생

 

# 지속적 문제 발생, 모니터링 강화 (22년 12월 중순)

다른 문제로 다운이 계속 발생하자 원인을 찾기 위해 로깅 강화

(application.log 파일로 한 서버의 라이프사이클을 보기 좋게 로깅하여 파일로 저장. 나중에 눈으로 보기 쉽게 불필요한 로그를 최소화하는 작업 진행)

 

로그 파일 모니터링으로 인한 새로운 원인 규명

CPU와 RAM 부족으로 인한 EC2 다운 -> 하지만 무엇 때문인지는 찾지 못 함.

당시 개발에 시간을 투자해야 해서 면밀히 조사해보지 않고 넘어감 (역시 발생할 때마다 그냥 재부팅했음)

 

# 문제 원인 파악 (23년 1월 중순)

주기적인 서버 다운으로 인한 프론트 개발팀의 개발이 더뎌지는 문제 발생 -> 원인을 확실히 파악하고 해결하고자 하는 계기가 됨

 

일단 트래픽의 출처를 찾기 위해 프론트에서 방문 로그와 서버 측에서 요청마다 IP 로그를 남기도록 설정했다.

 

새로운 원인 식별

서버가 다운 됐고, 로그를 보니 해외 IP 트래픽이 찍혀 있었다. 왜 인지는 모르겠으나 해외 IP의 무분별한 요청으로 인해

쓰레드 풀 초과, 서버 다운으로 이어졌었다.

 

독일, 샌프란시스코 등 다양한 곳에서 보냈었다.

 

 

# 해결 방안 모색

우선 해외 IP를 차단하여 국내 트래픽만 허용하는 식으로 해결방안을 모색했고 선택지는 다음과 같았다.

(추가로 어느 스타트업 CTO분께 자문을 요청했는데 친절하게 해결방안을 같이 찾아주셨다. 정말 감사드립니다!)

바쁘신 와중에도 도움을 주셔서 감사합니다 :)

일단 리눅스 해외 IP 차단을 EC2에 적용하고 (iptables) DB 커넥션 풀을 늘리고 실행 메모리를 늘려서 최대한 서버가 죽지 않게끔 설정하였다.

 

이제 앞으로 상황을 계속 모니터링하면서 또 발생하는지, 대처가 잘 되었는지 경과를 살펴봐야겠다.

반응형
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크