문제
나는 EC2를 프리티어(t2.micro)로 사용하고 있고, 작고 소중한 1GB의 Ram으로 프로그램을 돌리고 있다.
AWS EC2 원격 서버에 DB만 올려놓고 쓸 때는 한 번도 먹통인 적이 없었는데, 프로젝트를 배포하고 나서는 프로그램이 돌아가는 도중 EC2가 멈추거나 ssh 원격 접속이 되지 않는 문제를 겪었었는데, 나는 이런 일이 꽤 자주 일어났었다.
처음에는 렉인가? 했는데 찾아보니 아무래도 작은 램 위에 직접 Spring을 띄우다 보니 작은 용량의 프로그램이더라도 CPU를 꽤 많이 잡아먹었던 모양이다.
실제로 CPU 사용률을 보면 100%를 잡아 먹고 있었다..! ㅜㅜ
해결 방법들
1. 인스턴스 재시작하기
그러나 이건 매우 임의적인 방법이다. 나도 처음엔 해결이 된 줄 알고 계속 썼는데 근본적으로 해결해주지 못했고, 계속해서 이 오류를 만났다.
2. 물리적인 메모리의 용량 늘리기
인스턴스 스펙을 업그레이드 해주는 방법인데 나는 비용을 지불하지 않고 해결해보고 싶었다 !!
3. swap 메모리를 통해서 하드 용량을 사용해 메모리 확보하기
❓ swap 메모리란?
실제 메보리보다 더 많은 메모리가 필요할때 디스크 공간을 이용해서 부족했던 메모리 공간을 늘릴 수 있는 공간이다.
swap 메모리는 하드 디스크 공간을 이용해 만들어낸 가상의 메모리기 때문에 하드 디스크의 용량은 떨어지며, 속도가 많이 떨어질 수 있다고 한다.
(무료니까 감안해야지 ~~!)
swap 메모리를 사용하여 문제 해결
1. swap 메모리 추가
$ sudo dd if=/dev/zero of=/swapfile bs=128M count=16
$ sudo chmod 600 /swapfile
프리티어는 1GB 제공인데, 명령어를 통해 2GB 스왑 파일을 생성한다.
sudo 명령어로 권한을 주어야 함으로 앞에 꼭 적어주기
2. swap 메모리를 swap 파일로 포맷
$ sudo mkswap /swapfile
스왑 메모리를 스왑 파일로 포맷할 수 있는데, 이게 무슨 말이냐면 물리적인 메모리(RAM)가 부족할 때 임시로 사용할 수 있는 스왑 공간을 디스크에 파일 형태로 만들어 사용할 수 있다는 뜻이다.
일반적으로, 스왑 공간은 디스크의 특정 파티션으로 설정되지만, 스왑 파일을 사용하면 기존 파티션을 수정하지 않고도 스왑 공간을 추가할 수 있어서 변경해주는 것!
3. swap 메모리 활성화
$ sudo swapon /swapfile
$ sudo swapon -s
스왑 메모리를 활성화 시킨다.
두 번째 명령어의 출력은 활성화된 스왑 파일의 정보와 크기 등을 나타낸다.
4. swap 메모리 시스템이 재시작되더라도 자동 활성화
$ sudo vi /etc/fstab
# 마지막 행에 추가하기
/swapfile swap swap defaults 0 0
위 명령어를 입력하면 설정 파일이 나올 것이다. 마지막 행에 해당 구문을 추가하고 esc를 누른 후 :wq를 입력해서 저장하고 나온다.
이렇게 하면 완성이다 !
현재 메모리 사용 및 가용 메모리에 대한 정보를 확인하려면
$ sudo free -h
이 명령어를 입력해서 현재 메모리에 관한 정보를 확인해보면 된다.
참고할 사항은 스왑 메모리로 2GB로 넓혔다고 해도 프리티어의 사양으로는 또 저런 상황을 만날 수 있고 느려질 수 있다...! 주의하세욤
'Cloud' 카테고리의 다른 글
[AWS] client_loop: send disconnect: Broken pipe 접속 끊어짐 + 해결 방법 (0) | 2024.11.20 |
---|---|
[AWS] nohup으로 배포 시 로그 확인하기 + 리눅스 명령어 (0) | 2024.11.18 |
[AWS] 로컬 시간과 AWS 서버 시간 차이 (0) | 2024.11.12 |
[AWS] 디비버(DBeaver) Public Key Retrieval is not allowed 에러 (1) | 2024.11.12 |