[AWS EC2] SSH 연결 트러블 슈팅
문제 발생
진행중인 경매 어플리케이션 프로젝트에서 터미널로 에러를 확인하기 위해 AWS EC2 인스턴스에 SSH로 연결하려고 시도
기존에는 접속이 잘 되었지만 Operation timed out 에러가 발생.
문제 분석
Operation timed out 에러는 EC2 인스턴스와의 연결이 지정된 시간 내에 이루어지지 않았을 때 발생하는 에러임.
현재 EC2의 T2와 T3 시리즈 인스턴스를 사용중이기에 CPU 크레딧 소진 문제를 의심.
CPU 크레딧 소진 문제는 성능을 버스트할수있는 CPU 크레딧 시스템에 의해 관리되기 때문에 일정량의 CPU 성능을 일정 기간 동안 사용할 수 있도록 크레딧이 할당됨. 하지만 이 크레딧을 다 써버리면 CPU 성능이 제한되며 연결 지연이나 서비스 중단이 발생.
CPU 크레딧 시스템
CPU 크레딧은 brustable 인스턴스에 주어진 임시 성능을 제공 -> 평소에는 크레딧을 적립하고 필요할 때 버스트 성능을 발휘함.
T2/T3 인스턴스는 기본적으로 시작시 0% 부하에서 작동되며 CPU 크리뎃을 적립하면서 성능이 필요한 시점에 버스트를 사용할 수 있음.
그런데 크레딧이 소진되면 인스턴스는 기본 성능으로 돌아가게 되며 높은 부하가 지속되면 네트워크 지연, SSH 연결 실패, 애플리케이션 성능 저하가 발생할 수 있음
소진 원인
- 과도한 CPU 사용: 애플리케이션이 CPU를 과도하게 사용하는 경우(무거운 처리나 반복적인 요청 처리)가 지속되면 CPU 크레딧이 소진.
- 부하가 많은 서비스: 트래픽이 급증하거나, 백그라운드에서 리소스를 많이 사용하는 서비스(데이터베이스, 캐시 시스템)가 있을때 크레딧 소진 문제가 발생할 수 있음.
- 잘못된 서버 설정: 자주 CPU 성능을 사용하는 프로세스가 돌고 있거나, 인스턴스를 최적화하지 않은 경우에도 크레딧이 빠르게 소진
해결 방법 (CPU 크레딧 소진 예방 방법)
1. CPU 사용 최적화
- 애플리케이션 최적화: 코드 최적화 및 효율적인 리소스 사용을 통해 CPU의 부하를 줄이기 (캐싱을 활용하여 반복적인 연산 줄이고, 비동기 처리로 작업 분배)
- 주기적인 모니터링: CloudWatch의 AWS 서비스로 인스턴스의 CPU 사용률 모니터링하고, 비정상적인 CPU 사용 패턴 식별해내기
- 오토 스케일링: 애플리케이션이 갑자기 많은 리소스를 요구할 때 오토 스케일링을 활성화하여 부하를 분산시키기
2. T3 Unlimited 활성화
T3 인스턴스는 기본적으로 CPU 크레딧을 적립하여 사용하지만 T3 Unlimited 모드를 활성화하면 크레딧을 소진해도 초과 크레딧을 사용할 수 있어서 성능 저하를 방지할 수 있음
-> 이 모드는 버스트 성능을 지속적으로 사용할 수 있는 옵션으로 T3 인스턴스가 크레딧을 초과 사용할 수 있게 해줌
3. EC2 인스턴스 업그레이드
CPU 크레딧 소진 문제를 근본적으로 해결하려면 고성능 인스턴스로 업그레이드 하는 것도 좋은 방법
-> M5나 C5 인스턴스 처럼 고성능의 컴퓨팅 리소스가 필요한 경우에는 다른 EC2 유형으로 변경
-> 해당 옵션은 실서버 운용할때 고려해볼듯,,,,
T2/T3: 버스트 성능이 필요한 경우 적합 CPU 크레딧을 사용
M5: 일반적인 워크로드에 적합 고정된 성능을 제공
C5: CPU 집약적인 작업에 적합 더 높은 성능을 제공
해결 방법
인스턴스 재부팅
인스턴스 재부팅시 CPU 크레딧이 새롭게 충전되어 성능이 회복됨.
EC2 보안 그룹 및 네트워크 설정 확인
인스턴스의 보안 그룹이 제대로 설정되어 있는지 재확인, 22 port가 열려있어야만 ssh 접속이 가능함
SSM사용
ssh로 접속이 불가능한 경우, EC2 Instance Connect 또는 AWS SSM을 사용하여 인스턴스에 접속할수 있지만, 해당 과정까지는 안가도 되었음.
SSM을 통해 EC2 인스턴스에 접속하면 ssh가 비활성된 상태에서도 브라우저 기반으로 인스턴스에 접근이 가능함.
최종적으로 EC2 인스턴스에 접속 후 DOCKER 컨테이너들이 Exited상태로 꺼져있음을 확인(인스턴스 성능 제한으로 컨테이너 정상 실행되지않음)하고 DOCKER 컨테이너 복구
최종 결론
CPU 크레딧 소진 문제로 인해 EC2 성능이 제한되고 ssh 연결이 불가능해짐
-> 인스턴스 재부팅 및 CPU 크레딧 새롭게 충전
EC2 인스턴스 재부팅 통해 CPU 크레딧 복구되고 ssh 연결 및 DOCKER 컨테이너 다시 정상적으로 동작하게함.
추후에 실 서비스 운용시에 T3 Unlimited 모드 활성화하거나 인스턴스 업그레이드를 고려해 봐야 할 것 같음,.,,,,