사이드프로젝트(Closet)가 배포까지 완료되어, 이제 마무리 단계라고 생각할 때 쯔음 여러 의류를 저장한 다음 무한 스크롤을 시험해보려 하고 있었다. 데이터가 10개 이상은 저장되었어야 그 이상의 데이터를 저장한 다음 이제 목록 페이지로 이동하여 의류들을 살펴보려고 하는데, 이미지가 s3 에서 제대로 업로드 되지 않고 깨지는 현상이 발생했다.
오류를 살펴보니 502 gateway out.
특별한 코드 문제가 없는것을 보니 결국은 제 시간안에 이미지를 처리하지 못한다는 것인데, (pm2 monit 에서는 오류가 발생하지 않고) 무엇이 문제일지 잘 파악이 되질 않았다.
문득 front 인스턴스의 pm2 shell 속도가 급격하게 감소하는 것을 보고, 뭔가 front 인스턴스에 과부화가 생긴것은 아닐까 의심하게 되었고, 프리티어이기에 RAM 이나 CPU 가 형편없다는 사실이 다시금 떠오르기 시작했다. 만일 컴퓨터의 계산 자체가 과부화가 걸리는 것이라면, 그래서 서버가 터지는 현상이 발생한다면 이러한 문제가 발생하지 않을까 싶었다.
그렇다고 현재 프리티어에서 더 높은 단계의 인스턴스로 이동하기에는 사이드 프로젝트인 만큼 뭔가 꺼려지는 느낌이다. 일단 할 수 있는 조치를 다 해보고 그럼에도 안되면 옮겨야 할듯한데... 방법을 찾다보니 RAM 에 한해서는 그 용량을 늘려 사용할 수 있는 방법이 있다는 것을 알게 되었다.
SWAP Memory
인스턴스의 설정이라기 보단 Linux 의 설정이라고 해야겠다.
스왑 메모리는 기존 메모리 램이 가득차있지만, 그럼에도 메모리 사용이 필요해질 때 일부 하드디스크 공간을 활용해서 어느정도의 메모리 역할을 대체하게 되는 메모리를 말한다.
실제 성능은 기존 메모리보다 떨어지지만, 그럼에도 없는것보다야 훨씬 좋다고 할 수 있겠다. 당연하게도 우리가 무료로 사용하는 프리티어 모델의 경우, 성능이 너무나 않좋기 때문이다. 프리티어의 경우 30GB 의 SSD 와 1GB 의 메모리를 제공한다. 흔히 우리가 조립으로 컴퓨터를 맞출 때 램은 기본적으로 16GB 를 사용하던 것을 생각해보면 터무니 없이 적은 메모리를 자랑한다.. 무료니깐 당연한거같지만 그러기엔 너무 제한사항이 많다.
물리적 메모리 사용량이 가득차게되면 프로세스가 더이상 실행되지 않기에 스왑 메모리 설정은 프리티어 사용자에게 필수적인 선택이 아닐까 싶다.
참고로 SSD 의 연산속도는 450MB/s 이며, 물리적 램의 연산속도의 경우 12,800MB/s 의 속도를 자랑한다. 많은 차이가 있다는점은 유의하자.
리눅스에 스왑 메모리 설정하기
설정하는 방법은 이미 AWS 공식 홈페이지에서 설명해주고 있다.
https://repost.aws/ko/knowledge-center/ec2-memory-swap-file
스왑 파일을 사용하여 Amazon EC2 인스턴스의 스왑 공간으로 메모리 할당
Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에서 스왑 파일로 사용할 메모리를 할당하려고 합니다. 어떻게 해야 하나요?
repost.aws
아마도 AWS 자체에서도 이미 프리티어의 메모리 부족에 대해 인지하고 있고, 그렇기에 스왑 메모리의 활용 방법을 알려주는게 아닐까 싶다.
우선 중요한 것은 스왑 메모리의 용량을 어느정도로 해줄 지 결정해야 한다. 우분투를 사용하니 우분투에서 권장되는 메모리 별 스왑메모리의 기준은 아래 링크홈페이지에서 확인할 수 있다
https://help.ubuntu.com/community/SwapFaq#How_much_swap_do_I_need.3F
SwapFaq - Community Help Wiki
Introduction This FAQ is aimed at Linux novices. People always wonder how much swap they should create at install time, or after installing they may think, "have I made a large enough swap? Should I reinstall with a larger swap?" This FAQ will tell you how
help.ubuntu.com
권고하는 바로는 물리적 메모리가 1GB 이하라면(현 프리티어), 물리적 메모리 용량의 최대2배치의 용량을 스왑 메모리로 할당하라고 한다. 즉 2GB 로 설정하는것이 좋겠다.
이제 설정하는 방법에 대해 알아보자
dd 명령을 사용하면 루트 파일 시스템에 스왑 파일을 생성할 수 있다. 이러한 명령문에서 bs 는 블록의 크기를 나타내며 count 는 블록의 수를 나타낸다. 한번에 그냥 2gb 를 설정하지 못하는 이유는 블록의 크기는 인스턴스에서 사용 가능한 메모리의 용량보다 작아야 하기 때문이다. 그렇지 않으면 "memory exhausted" 오류가 발생하게 된다.
스왑 메모리는 설정한 bs 와 count 의 곱한 값으로 설정이 된다. 그렇기에 사용자가 원하는데로 스왑 메모리를 결정할 수 있다.
현재 나는 2GB 로 설정을 할 것이기 때문에, 아래와 같이 명령문을 작성하겠다
(이 명령어는 인스턴스에 ssh 접근을 통해 ubuntu 에서 실행시키는 것이며, sudo(관리자권한) 을 잊지말자)
sudo dd if=/dev/zero of=/swapfile bs=128M count=16
128 * 16 이 대략 2GB 이니 위처럼 설정하였다. 조금의 설정 시간이 걸린 다음 아래처럼 결과창이 뜨게 된다
다음에는 스왑파일의 읽기 및 쓰기 권한을 업데이트한다
sudo chmod 600 /swapfile
이후 Linux 의 스왑 영역을 설정해준다
sudo mkswap /swapfile
다음 스왑공간에 스왑 파일을 추가하여 바로 사용할 수 있도록 해준다
sudo swapon /swapfile
추가된 스왑 영역을 확인해보자
sudo swapon -s
확인 시 아래와 같은 결과창이 보이게 될 것이다.
매번 설정해주는것은 귀찮으니 서버가 재부팅 될 때마다 알아서 설정을 해주도록 해주겠다. 우선 편집기를 넣어준다
sudo vim /etc/fstab
파일을 실행시켜주면 2줄의 Label 이 보일것인데, 이 다음줄에 아래와 같이 작성해주자
/swapfile swap swap defaults 0 0
:wq 를 통해 저장해주고 난 다음, 실제로 메모리의 역할을 하고 있는지 확인해주자
sudo free -h
결과창은 다음과 같다
여기까지 했으면 설정은 마무리된다
현재 나는 2개의 인스턴스를 사용중이기 때문에 각각의 인스턴스마다 스왑 메모리를 설정해주었다. 대체제로서 설정은 해주었지만 만일 프로젝트를 돌리는데 스왑 메모리로도 프로세스 다운이 일어난다면.. 인스턴스를 업데이트 해주는 방식이 유일할 것 같다.
![](https://t1.daumcdn.net/keditor/emoticon/friends1/large/012.gif)
참고문헌
https://repost.aws/ko/knowledge-center/ec2-memory-swap-file
스왑 파일을 사용하여 Amazon EC2 인스턴스의 스왑 공간으로 메모리 할당
Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에서 스왑 파일로 사용할 메모리를 할당하려고 합니다. 어떻게 해야 하나요?
repost.aws
https://incomeplus.tistory.com/284
AWS EC2 프리티어 메모리 부족 서버 터짐 해결방법 swap memory 사용하는 방법
How to append additional memory to AWS Freetier EC2? AWS EC2 프리티어 서버가 계속해서 터진다면 99%는 메모리 부족문제라고 볼 수 있다. 프리티어로 제공되는 서버 컴퓨터의 스펙이 너무 낮기 때문에 서버에
incomeplus.tistory.com
'Programing > ETC' 카테고리의 다른 글
1주일 (0) | 2022.10.19 |
---|---|
2차 프로젝트 - 뒤늦은 프로젝트 회고? (0) | 2022.10.09 |
3개월이전, 그리고 이후 (2) | 2022.09.18 |
코로나를 또 걸렸..네.. (0) | 2022.08.19 |
오늘은 아무것도 안하련다 (0) | 2022.08.01 |