기록

[issue] AWS-EC2: 연결성 검사에 실패했습니다, CPU 100% 점유 본문

DevOps

[issue] AWS-EC2: 연결성 검사에 실패했습니다, CPU 100% 점유

youngyin 2024. 2. 13. 12:00

시작하면서

사이드 프로젝트를 진행하던 도중에 팀원에게 API서버에 접속할수 없다는 연락을 받았다. 직접 서버에 콘솔(SSH)로 접속하려고 하였으나 접속할수 없었다. AWS 인스턴스를 확인한 결과, 아래처럼 연결성 검사에 실패하였다는 오류메세지를 확인할 수 있었다. (24/01/24)

다른 글들을 찾다가, 인스턴스 내부에서 메모리 부족이나 심각한 오류가 발생한다면 같은 오류가 발생할수 있다는 것을 알았다. 메모리 사용량과 AWS 시스템 상에 제공하는 시스템 로그를 확인하였으나, 특별한 문제를 찾지 못하였다.

해결방법

우선, 재시작하기

우선 인스턴스를 재시작하고, 서비스를 실행시켰다. 그러나 일주일 정도 후에 같은 문제가 발생하였고, 그 주기가 점점 짧아졌다.

CPU 100% 점유

문제의 원인을 찾고자 EC2의 대시보드를 확인해보았고, 서버에 접근할 수 없을 때마다 **CPU 사용량**이 100% 가까이 치솟는 것을 확인할 수 있었다. 그래서 간헐적으로 인스턴스에 접근할 수 없었던 이유가 CPU 확신하게 되었다.

사진에 보이는 것처럼 지금(02/06)까지 총 3번의 서버에 접속할수 없는 문제가 있었고, 그때마다 CPU 사용량이 치솟았다. 그 시간대가 저녁 6시경, 오전 11시경, 오후 3시경으로 트래픽이 많아져서 발생한 문제라고 보기는 어려웠다. 아직 서비스하는 채널이 없는 것과 개발자들이 보통 18시 이후에 작업하는 것을 고려한다면, 왜 저 시점에 CPU 사용량이 증가했는지 유추하기 어려웠다.

다른 글들을 확인해보니, 아래와 같은 것이 높은 CPU사용율의 원인이 될수 있다는 것을 벌견했다.

  1. 매우 낮은 스펙의 메모리 
  2. 누군가 EC2를 해킹하여 사용하는 경우
  3. AWS EC2 인스턴스의 크래딧을 전부 사용한 경우
  4. AWS EC2 인스턴스의 하드웨어 문제

이중에 의심스러운 것은 3번과 4번의 경우이다.

3. AWS EC2 인스턴스의 크래딧을 전부 사용한 경우

아직 개발팀은 무료 크래딧을 사용하고 있고, 그로인해 특정 CPU임계값을 넘어가는 경우 CPU 문제가 생길수 있다는 것인데.. 이경우, 무제한 모드로 인스턴스의 버전을 바꾸어야 한다고 들었다.

4. AWS EC2 인스턴스의 하드웨어 문제

이 경우, 다른사람들은 인스턴스를 새로 생성하여 교체하거나 AWS측에 문의를 하는 방식으로 문제를 해결했다고 한다. 

더 공부할 것

AWS에 대한 지식이 적고, 경험이 부족해서 문제의 원인을 파악하는 것에 문제가 있었다. 그래서 당분간(1-2주간) 해당인스턴스를 그대로 두고 모니터링을 진행하려고 한다. 그러나 문제가 발생하였을 때 빠르게 확인하고, 서비스를 시작하는 것이 필요했다. 그를 위해 CloudWatch를 활용하여 CPU 점유율이 높을 때 운영자에게 알림(email/slack 등)을 보내고, 인스턴스를 재기동하도록 처리하려고 한다.

또한 리눅스에 서비스를 두어, 서버가 재기동될때 apiProject.jar가 실행되도록 설정하는 것이 필요하다. 

TODO : CPU 점유율이 80%인 경우, 서비스 재시작
  • 운영자에게 알림(email/slack 등)을 전송
  • 인스턴스 재기동
  • 서버가 재기동될때 apiProject.jar가 실행되도록 설정
Comments