EC2 사용 중 프로젝트를 빌드하면 뻗는 상황이 발생했다. 일단 임시방편으로 swap 메모리를 주어서 해결함
swap 메모리란?
- 물리 메모리를 대신하여 사용하는 하드디스크 상의 공간
메모리가 부족할 때 하드디스크의 일부 공간을 메모리처럼 사용하는 것
(AWS EC2를 사용하는 경우, AWS에서 제공하는 컴퓨터의 하드디스크를 이용하는 것이다.)
swap 메모리 사용 시, 메모리에 위치한 프로세스의 우선순위가 낮거나 사용도가 낮은 경우 다른 프로세스를 위해 이를 swap영역으로 이동시킬 수 있다. 이를 페이징이라고 함 - swapping(스와핑)
메모리가 부족할 때 우선 하드디스크공간을 이용하고, 메모리에 여유가 생기면 다시 메모리를 사용하는 것 - swapping 사용 방식
swap 파티션 : 파티션 중 하나를 swapping 영역으로 사용
swap file : 일반적인 파일 시스템에 존재하는 파일을 swapping 영역으로 사용
장점
실제 보유한 메모리보다 많은 양의 메모리를 사용할 수 있다.
단점
swap 메모리는 읽기/쓰기 작업이 많이 실행되는데, 이는 하드디스크 수명에 부정적인 영향을 준다.
하드디스크는 RAM에 비해 읽기/쓰기가 느리기 때문에 swap 메모리를 과도하게 사용하면 전반적인 속도가 느려질 수 있다.
→ swap 영역은 되도록 사용하지 않는 것이 좋음. 비상 상황을 대비하여 만드는 것으로 생각하는 것이 바람직
swap 메모리 용량 정하기
RAM | SWAP 영역 |
RAM <= 2GB | RAM 용량의 2배(최소 32MG) |
2GB < RAM < 32GB | 4GB + (RAM - 2GB) |
RAM >= 32GB | RAM 용량의 1배 |
t2.micro는 약 1GB여서 2GB로 설정했었고, t2.medium은 약 4GB로 되어 있어서 6GB로 설정하기로 하였다.
여기서는 t2.medium의 swap메모리 설정한 내용을 포스팅한다.
swap 메모리 할당하기
현재 메모리 할당 상태 확인
free -h
free 명령어 옵션
free : 리눅스 시스템에서 메모리의 전체적인 현황을 확인할 수 있는 명령어
-h : 사람이 읽기 쉬운 단위로 출력
-s 초 : 입력한 초만큼의 간격을 두고 반복 실행. 멈추고 싶으면 Ctrl + C
6GB를 줄 것이기 때문에 bs=128M, count=48로 설정
sudo dd if=/dev/zero of=/swapfile bs=128M count=48
여기서 시간이 좀 걸릴 수 있는데, 다른 거 건들지 말고 그냥 기다리면 된다.
너무 오래걸리는데? 싶어도 기다리면 됨
swapfile의 읽기/쓰기를 root만 가능하도록 권한 변경
sudo chmod 600 /swapfile
mkswap 명령어를 사용해 swapfile을 리눅스의 swap 영역으로 설정
sudo mkswap /swapfile
swap 사용 시작
sudo swapon /swapfile
추가된 sawp 영역을 확인
sudo swapon -s
서버를 재부팅해도 SWAP을 자동으로 할당해주기 위해 /etc/fstab 파일에 하단 내용을 추가
sudo vi /etc/fstab //파일 열기
/swapfile swap swap defaults 0 0 // 이 내용 추가
swap 메모리 할당이 잘 되었나 확인
free -h
근데 나는 처음에 swap 용량을 잘못 설정해서 swap 설정을 다시 설정해줘야 했음
swapfile 지우기
swapfile 사용 중지
sudo swapoff /swapfile
swapfile 삭제
rm -rf /swap/swapfile
서버 재부팅 시 swap 자동 할당을 막고자 추가했던 내용을 주석 혹은 삭제
sudo vim /etc/fstab
이제 sudo dd ~ 부터 다시 시작하면 된다.
swap 메모리 설정 후 Jenkins로 프로젝트를 빌드하는 순간 swap 메모리가 바로 사용되었다.
빌드 이후에는 메모리의 사용영역 감소, 가용영역은 증가하고 swap영역이 늘어나는 것을 볼 수 있는데
아마 빌드 이후에 사용정도가 낮은 프로세스가 swap메모리로 이동한 것으로 보인다.
total : 현재 설치되어 있는 메모리의 전체 크기
used : 현재 사용 중인 메모리의 크기 (total - (free + buffer/cache))
free : 시스템에서 사용 가능한 잔여 메모리 크기 (사용되지 않은 메모리)
shared : 프로세스 간 공유되는 메모리의 크기. 주로 프로세스 또는 쓰레드 간 통신에 사용
buffer/cache : 캐시 영역으로 사용하는 메모리의 크기
available : swapping 없이 새로운 프로세스에서 할당 가능한 메모리의 예상 크기
그냥 기록용

참고
https://incomeplus.tistory.com/284
AWS EC2 프리티어 메모리 부족 서버 터짐 해결방법 swap memory 사용하는 방법
How to append additional memory to AWS Freetier EC2? AWS EC2 프리티어 서버가 계속해서 터진다면 99%는 메모리 부족문제라고 볼 수 있다. 프리티어로 제공되는 서버 컴퓨터의 스펙이 너무 낮기 때문에 서버에..
incomeplus.tistory.com
'AWS' 카테고리의 다른 글
EC2 putty Connection timed out(gateway문제) (0) | 2023.03.30 |
---|---|
스냅샷으로 EC2 생성 (0) | 2023.03.29 |
스냅샷으로 RDS 생성하고 workbench로 접속 (0) | 2023.03.27 |
AWS 결제 카드 변경 (1) | 2023.02.02 |