서버를 생성 할 때마다 그냥 문서를 보고 치는 명령어가 갑자기 궁금해져서 찾아보다가 정리하게 되었다.
스왑 메모리 (Swap Memory)
스왑을 설정하기 이전에, 스왑이란 무엇이고 스왑을 사용하면 어떤 장점을 가질 수 있는 알아 보도록 하자.
Swap 메모리를 할당하게 되면 스왑 공간을 가지게 되는 되는데,
실제 메모리(RAM) 즉 물리 메모리가 가득 차게 된다면 프로세스 더 이상 이어가지 못하고 종료가 된다,
이를 방지하고자 부족한 메모리를 하드 디스크 공간으로 할당한 스왑 메모리를 통하여 진행을 한다.
앞서 말한것처럼,
Swap메모리는 물리적인 메모리가 아닌, 디스크의 공간을 메모리처럼 활용하여 처리 속도면에서는 떨어진다.
Q. 물리메모리를 증가시키는것보다 처리속도가 느림에도 SWAP메모리를 이용하는 이유는?
필자가 자주 사용하고 있는 Cloud 서비스는 AWS로, EC2를 이용하서 서버를 구성하고 있다.
일반적으로 범용 내의 t3를 이용하는데 t3 요금체제는 아래와 같다.
nano에서 2배 증가한 메모리는 micro를 바라보게 되는데 이때 요금이 2배가 차이난다 ...^^...
사용한만큼 내면 된다라고 하지만 서버리스를 쓰는것도 아닌 일반적으로 컴퓨팅을 하는 서버를 껐다 켰다 할 수 없지 않나.
이러한 이유로 어느정도 사용하는 서비스의 메모리를 기준으로는 서버를 생성을 해야하나,
일시적으로 증가할 수 있는부분까지 고려하면서 서버를 산다는것은 비용적인 측면에서 좋은 선택지는 아닌 것 같다.
이럴때 Swap을 사용하게 된다라면, 스토리지는 어차피 필요한 영역이고 스토리지를 이용하여 메모리를 할당 받는것이 좋지않을까 하여 Swap을 사용한다라고 생각하고 있다.
(해당부분이 잘못되었다면 언제든지 고칠 의향이 있으니, 알려주신다면 고치도록 하겠습니다. )
Swap 메모리 할당 방법
먼저 스왑 메모리를 할당하는것은 하드디스크를 이용하기에 하드디스크의 용량을 확인 해봐야합니다.
df -h
하드디스크 용량을 확인했다면, 그중 얼마정도의 swap 메모리로 설정할지 정하고 아래와 같은 명령어를 입력합니다.
# 2G의 의미는 2G만큼을 swapfile로 생성하게 되어집니다.
# 따라서 {N}G와 같이, N에 본인이 생성할 스왑메모리를 할당합니다.
sudo fallocate -l 2G /swapfile
이후 만들어진 swapfile에 대한 권한을 수정합니다.
chmod 600 /swapfile
생성된 swapfile을 이용하여 swap memory를 활성화 시킵니다.
sudo mkswap /swapfile
sudo swapon /swapfile
시스템이 재부팅이 되어도 만들어진 swap이 적용될 수 있게 내용을 수정해줍니다.
sudo echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
위에서는 한줄명령어로 바로 수정하게 만들었으나,
만약 수정이 잘 안되거나, 에디터를 열어서 수정하고 싶다라면 아래의 방식을 이용하면됩니다.
아래의 명령어를 이용하여 에디터를 열어줍니다.
vi /etc/fstab
에디터가 열렸다면, 해당 파일의 마지막 라인에 아래의 명령어를 입력하고 저장하고 나옵니다.
/swapfile none swap sw 0 0
이후 free 명령어을 입력했을때 swap공간이 배분이 되었다면 성공적인 swap파일을 만들게 된 것 입니다.
vm.swappiness : Swap 메모리 활용 수준 조절하기
위에서 스왑 메모리를 잘 만들었다면,
해당 메모리에 대한 활용 및 사용의 적극성 수준을 관리하는 리눅스 커널이 존재한다.
vm.swappiness의 값은 0~100까지로 지정할 수 있으며.
해당 범주는 아래와 같다.
값 | 설명 |
vm.swappiness = 0 | 스왑 사용안함 |
vm.swappiness = 1 | 스왑 사용 최소화 |
vm.swappiness = 60 | 기본값 |
vm.swappiness = 100 | 적극적으로 사용 |
메모리 여유가 충분 할 때 성능향상을 위해 "10"으로 권고하는 경우도 있다라고 함.
현재 설정된 값을 확인할때는 아래의 명령어를 입력하여 확인 할 수 있다.
sysctl vm.swappiness
값을 변경할때는 즉시 변경과 영구변경으로 나누어 지는데,
즉시변경으로 하게 되는경우 재부팅시 초기화 되어 원상복구가 된다.
즉시 변경
sysctl vm.swappiness=10
영구 변경
에디터를 열어 파일을 수정하는데, 맨 처음 파일을 수정하는 경우 해당 리눅스 커널이 없음으로 새롭게 작성해주면 된다.
sudo vi /etc/sysctl.conf
에디터가 열린 뒤 원하는 값을 입력하고 저장하고 에디터를 종료한다.
vm.swappiness = 40
vm.vfs_cache_pressure : Swap파일보다는 물리적인 메모리를 이용하게 하자
앞서 말한 리눅스 커널과 연관된 값으로 vfs_cache_pressure가 존재한다.
디렉토리와 inode 오브젝트에 대한 캐시로 사용된 메모리를 반환하는 경향의 정도를 지정하는 값이다.
기본값은 100이며, 0으로 설정하게 되면 오브젝트에 대한 캐시를 반환하지 않아 "Out of Memory"를 볼 수 있다..
100이상의 값을 주게 된다라면 캐시를 보관하는 빈도가 줄어들게 된다.
현재 설정된 값을 확인할때는 아래의 명령어를 입력하여 확인 할 수 있다.
sysctl vm.vfs_cache_pressure
값을 변경할때는 즉시 변경과 영구변경으로 나누어 지는데,
즉시변경으로 하게 되는경우 재부팅시 초기화 되어 원상복구가 된다.
즉시 변경
sysctl vm.vfs_cache_pressure=10000
영구 변경
에디터를 열어 파일을 수정하는데, 맨 처음 파일을 수정하는 경우 해당 리눅스 커널이 없음으로 새롭게 작성해주면 된다.
sudo vi /etc/sysctl.conf
에디터가 열린 뒤 원하는 값을 입력하고 저장하고 에디터를 종료한다.
vm.vfs_cache_pressure=10000
Swap 메모리 초기화 하는법
메모리 용량이 충분히 남아있음에도 Swap메모리를 사용하는 경우가 존재하며,해당 공간이 자주 비워지지 않는경우데는 직접 할당되어있는 메모리를 초기화 할 수 있습니다.
swapoff -a : 스왑 메모리 사용을 중지 시킵니다.swapon -a : 스왑을 활성화 시킵니다.
swapoff -a && swapon -a
출처
https://zetawiki.com/wiki/%EB%A6%AC%EB%88%85%EC%8A%A4_swappiness
https://www.cloudbooklet.com/how-to-add-swap-space-on-ubuntu-20-04/
'Server' 카테고리의 다른 글
Docker 에러 해결 하기 (0) | 2024.02.20 |
---|---|
[Kafka] Kafka, 토픽&파티션, 컨슈머에 대해 알아보기 (1) | 2023.02.14 |
[Docker] 에러 해결법 정리 (0) | 2023.01.02 |