갑자기 ssh 접속이 되지 않아 aws EC2 콘솔에서 확인해보니, 상태 검사 에서 1/2개 검사 통과 라는 표시가 있었다.


인스턴스 > 상태 및 경보 메뉴에 들어가보니, 인스턴스 연결성 검사 실패가 원인이였다.
구글에 해당 에러 해결 사례를 검색해보니, 시스템 로그 가져오기에서 에러 원인을 파악하는 것 같았다.
나도 에러를 확인하기 위해 먼저 EC2 서버 재부팅 후 로그를 봐도 도저히 에러 문구에 해당하는 내용을 찾지 못했다.

그래서 위 사진 속, 시스템 로그 페이지에서 아래쪽에 있는 연결 을 클릭해보았다.

EC2 직렬 콘솔은 또 뭘까..?
지금 이 계정이 EC2 직렬 콘솔을 사용할 권한이 없다고 하니까, 권한을 줘야겠지. Manage access 를 클릭한다.

'허용' 에 체크!


다시 EC2 콘솔 화면으로 돌아가 인스턴스 > 상태 및 경보 메뉴를 보니, 아까의 원인이 해결되었다. ⁉️ 터미널에서 SSH 연결도 잘 된다.


nohup으로 백그라운드 실행 돌린게 문제가 된건지, 로그 쌓는데 메모리가 부족한건지.. 대체 뭐가 문제일까 싶었는데 AWS쪽 권한 이슈인 것 같다. 진작 설정해둘 수 있었던 문제 같은데, 어쨌든 해결 완료(?) 해서 다행이다 ㅎㅎ
+ 6/14 추가
👉 swap 메모리 할당하기
다시 동일한 이슈가 발생했다. 로그를 살펴보니 이런 에러를 찾을 수 있었다. (아마 이전에도 있었는데 내가 못찾은 것 같다..;)

" ... Datasource DataSourceEc2Local ... Out of memory: Killed process ... (mysqld) ... "
아마 Spring 서버와 Ec2 에서 RDS 연결 때문에 메모리 부족 현상이 발생한 것 같다.

그리고 위의 그래프를 보면, CPU 사용률이 99.7% 까지 올라간 것을 확인할 수 있다. 아무래도 프리티어로 사용하다 보면 RAM이 1GB밖에 되지 않아 메모리가 많이 부족한 것 같다.
이럴 때 해결할 수 있는 방법을 찾았다. Swap 메모리 할당하기!
1. 우선 EC2 서버를 재시작 한다. (지금 SSH 접근이 안되는 상황이라면)
2. 서버에 아래 명령어를 입력한다.
# dd 명령어로 swap 메모리 할당
$ sudo dd if=/dev/zero of=/swapfile bs=128M count=16
# swap 파일 권한 업데이트
$ sudo chmod 600 /swapfile
# linux 스왑 영역 설정
$ sudo mkswap /swapfile
# 스왑 공간에 스왑 파일을 추가해, 스왑 파일을 즉시 사용할 수 있도록 함
$ sudo swapon /swapfile
# 절차 성공 확인
$ sudo swapon -s
# 부팅시 스왑 파일 활성화 설정
$ sudo vi /etc/fstab
''' 파일 가장 아랫줄에 아래 내용 입력 '''
/swapfile swap swap defaults 0 0
그리고 이전에 만들었던 start.sh 파일을 실행하면 다시 Spring Boot 서버가 실행된다.

Swap 이란?
RAM 메모리가 가득 찼지만, 메모리가 더 필요할 때 디스크 공간을 이용해 부족한 메모리를 대체할 수 있는 공간을 의미한다.
즉, 하드디스크의 디스크 공간을 메모리처럼 사용하는 '가상 메모리 방식' 이다.
하드디스크를 이용하기에 속도는 떨어지지만, 실제 메모리가 부족한 상황에 대처할 방법이 된다.
'Study > GW' 카테고리의 다른 글
[Spring Boot3] 로컬-운영 환경 분리 (0) | 2024.06.19 |
---|---|
[AWS, Spring Boot3] EC2 배포, 서버 스크립트, Nginx 설치 (0) | 2024.06.11 |
[Spring Boot3] SSH 터널링 설정 (EC2 > RDS 데이터베이스) (0) | 2024.06.10 |
[AWS] 프리티어 EC2 생성, EC2-RDS 연결, DataGrip SSH 연결 (0) | 2024.06.05 |
[AWS] RDS Free Tier 과금 해결 (0) | 2024.06.05 |