TL;DR
- 인스턴스의 유형을 변경한다.
- 불필요한 프로세스를 종료한다.
- Swap 파일을 생성한다. (중요)
t2.micro: AWS Free Tier
우리는 AWS EC2를 Free-Tier로 처음 접할겁니다.
AWS Free-Tier는 무료로 클라우드를 접할 수 있는 매력적인 기회이죠.
하지만 또 많은 개발자들은 Free-Tier 사용 중 당황한 경험도 갖고 있을 것입니다.
방화벽 실수로 22포트를 막아서 내 서버에 접속하지 못하게 된다거나,
무료 범위를 벗어나서 예상치 못한 청구서를 맞이한다거나,
이런저런 작업을 하다가 메모리가 가득 차서 서버가 죽어버리는 경험이죠.
sakd.uk의 개발서버는 AWS에 t2.micro로 올라가 있습니다.
이 서버에는 API 서버와 Web 서버, 데이터 처리 서비스까지 모든 컨테이너가 부대끼며 실행 중입니다.
그러다보니 t2.micro의 1GB 메모리로는 아슬아슬한 상황이 되었습니다.
굳이 개발용 서버에 많은 돈을 더 들여야 할까 의문이 들었고,
가능한 방안을 하나하나 고민해보았습니다.
인스턴스 유형 변경
AWS는 목적에 맞는 여러 인스턴스 유형을 제공합니다.
게다가 변경하는 방법도 정말 쉽고 간단합니다.
인스턴스를 잠시 중지하고, 인스턴스 유형 변경 버튼을 선택하면 되죠.
하지만 내 지갑엔 쉽지 않은 방법이어서 최후의 수단으로 미뤘습니다.
불필요한 프로세스 종료
쉽게 메모리를 확보할 수 있는 방법은 불필요한 프로세스를 정리하는 것입니다.
테스트 등을 위해 실행해두고 잊은 프로세스가 있진 않은지 확인하고, 있다면 종료합니다.
메모리를 많이 사용 중인 프로세스를 확인하는 방법은 아래 두 가지가 있습니다.
top
서버에 ssh
로 접속하여 top
을 실행하면 프로세스별 시스템 자원 사용량을 집계하여 보여줍니다.
Windows의 작업 관리자와 유사한 기능입니다.
top
실행 중 다음 버튼을 누르면 보기 설정을 변경할 수 있습니다.
- t: 상단의 CPU 사용량을 수치, 그래프 등으로 변경하여 보여준다.
- m: 상단의 메모리 사용량을 수치, 그래프 등으로 변경하여 보여준다.
- Shift + p: 하단의 표를 CPU 사용량 기준으로 정렬하여 보여준다.
- Shift + m: 하단의 표를 메모리 사용량 기준으로 정렬하여 보여준다.
ps
top
과 마찬가지로 서버에 ssh
로 접속하여 ps
명령어를 실행하면 시스템 자원 사용량을 조회할 수 있습니다.
top
과의 차이점은 실행한 당시의 데이터만 일회성으로 보여준다는 점이며, 집계할 데이터를 파라미터로 전달할 수 있습니다.
메모리 사용량을 조회하려면 다음 명령어를 사용하면 됩니다.
ps uk -rss -e
각 파라미터는 다음을 의미합니다.
- u: 사용자, CPU 사용량, 메모리 사용량 등 사용과 관련한 정보를 자세히 출력한다.
- k -rss: 전달된 기준으로 정렬한다. -rss는 RSS(메모리 점유율) 기준 내림차순(-)을 의미한다.
- -e: 모든 사용자의 프로세스를 출력한다.
Swap 메모리 설정
종료할 프로그램이 없거나, 종료 후에도 메모리가 부족하다면 Swap 메모리가 설정되어 있는지 확인해봐야 합니다.
사실 부족하지 않더라도, Swap 메모리는 설정해두는 편이 좋습니다.
먼저 free
명령어로 현재 Swap 메모리가 설정되어 있는지 확인합니다.
Swap 메모리가 설정되지 않았다면, 아래와 같은 화면에서 Swap:
행이 표시되지 않습니다.
아직 Swap 메모리가 설정되지 않았다면 아래 명령어를 순서대로 입력하여 Swap 메모리를 할당합니다.
아래는 2GB이며, 메모리 용량이 따른 권장되는 Swap 용량은 이 페이지에서 참고할 수 있습니다.
$ sudo dd if=/dev/zero of=/swapfile bs=128M count=8
$ sudo chmod 600 /swapfile
$ sudo mkswap /swapfile
$ sudo swapon /swapfile
$ sudo swapon -s
모두 완료가 되었다면 재시동 이후에도 적용되도록 /etc/fstab
파일에 아래 내용을 추가합니다.
/swapfile swap swap defaults 0 0
재기동 후 free
명령어를 실행하여 Swap 공간이 확보되었는지 확읺난다.
결론
EC2 인스턴스 생성 후 적절한 용량의 Swap 파일을 설정하면 제한된 메모리를 더 효율적으로 활용할 수 있습니다.
인스턴스 유형 변경 전 진단해보도록 합니다.
참고 문서
- 알아보자! 프로세스 정보들을! top을 이용해서. - 베스핀글로벌 테크센터 블로그 (https://btcd.tistory.com/219)
- 리눅스 ps 명령어 - CODEHELPER (https://blog.naver.com/jsky10503/220728880785)
- Use swap file to allocate memory as swap space in Amazon EC2 instance - AWS re:Post (https://repost.aws/en/knowledge-center/ec2-memory-swap-file)
- AWS EC2 램 늘리기(feat. 스왑) - dev_shawn.log https://velog.io/@shawnhansh/AWS-EC2-메모리-스왑
#sakd_uk_이슈노트