Linux에서 Swap 메모리 추가하기.(Ubuntu 22)
안녕하세요. 달소입니다.
오랜만에 또 리눅스 관련 팁입니다 ㅎㅎ...
자의 반 타의 반.. 팰월드 서버를 구동하려고하는데 서버 메모리가 딸려서,, DarkAcid님 께서 권장해주신 Swap 메모리를 사용해서 문제없이 굴리는게 목표인지라 스왑을 최대한 상승시켜보겠습니다.
아래에서 GPT가 서술하듯,, 램과의 속도차이가 크기때문에 일단 디스크로 사용하면 성능저하가 좀 크실것이고 nvme 디스크라면 그나마 괜찮을듯합니다.
swap 메모리는 운영체제에서 사용되는 가상 메모리의 일부분입니다. 일반적으로 램(RAM)이 가득 차게 되면 운영체제는 사용하지 않는 메모리 페이지를 디스크의 스왑 공간에 저장합니다. 이렇게 저장된 페이지는 필요할 때 다시 메모리로 로드됩니다.
swap 메모리는 램의 부족한 용량을 보완하기 위해 사용됩니다. 램이 가득 차게 되면 운영체제는 더 이상 메모리를 할당할 수 없게 되는데, 이때 swap 메모리를 사용하여 일부 데이터를 디스크로 옮겨 놓음으로써 추가적인 메모리 공간을 확보합니다.
하지만 swap 메모리는 디스크에 접근하는 속도가 램에 비해 매우 느리기 때문에, swap 메모리를 사용하는 경우 성능 저하가 발생할 수 있습니다. 따라서 swap 메모리는 임시적인 해결책으로 사용되어야 하며, 램의 용량을 증가시키는 것이 더 효율적인 방법입니다.
현재 Swap 메모리 확인하기
확인하는 방법은 두가지가 있습니다.
free -h 를 이용한 확인과 swapon --show를 이용한 방법인데 후자가 더 상세히 볼수 있긴하지만 free -h 가 좀더 편합니다 ㅎ
저같은경우 서버의 메모리가 64G밖에 안되고 ZFS를 사용하고있기때문에 기본 메모리는 좀 짜게주고 Swap으로 nvme disk를 일부 사용하게끔 하고있습니다.
보통은 일반 램 용량의 2배정도(?) 할당하는걸로 알고있습니다.
스왑 메모리 추가하기
먼저 fallocate 명령어를 사용해서 스왑으로 사용할 2G 파일을 만들어주겠습니다.
그리고 권한을 600으로 만듭니다.
fallocate -l 2G /swap
chmod 600 /swap
이제 mkswap 명령어를 사용해서 이 파일을 스왑으로 만들고 swapon을 이용해서 swap으로 선언합니다.
mkswap /swap
swapon /swap
이 스왑의 경우 현재 시스템에서만 적용되며 재부팅 시에도 유지하기위해서는 /etc/fstab 파일을 수정해줘야합니다.
아래 명령어로 /etc/fstab 파일에 내용을 넣어주면 됩니다.
echo '/swap none swap sw 0 0' | sudo tee -a /etc/fstab
Swap 설정 조정
swap의 경우 설정만한다고 무조건 사용하는거 아닙니다.
위에 swapon의 list에서 보시다시피 우선순위도 있고 OS에서 데이터를 스왑하는 빈도가 기본적으로 구성되어있는데요.
swappiness가 바로 그 용도 입니다.
아래처럼 확인하고 조정하시면되겠습니다.
swappiness는 리눅스 운영 체제에서 가상 메모리의 사용을 조절하는 매개 변수입니다. swappiness 값은 0에서 100 사이의 값을 가질 수 있으며, 기본값은 일반적으로 60입니다.
swappiness 값을 조정하는 방법은 다음과 같습니다:
1. 현재 swappiness 값을 확인합니다. 터미널에서 `sysctl vm.swappiness` 명령을 실행하면 현재 설정된 swappiness 값을 확인할 수 있습니다.
2. swappiness 값을 조정합니다. swappiness 값을 낮추면 시스템이 더 많은 물리적 메모리를 사용하려고 하고, 높이면 가상 메모리를 더 많이 사용하려고 합니다. 일반적으로 swappiness 값을 낮추는 것이 좋습니다.
- swappiness 값을 변경하려면 `sudo sysctl vm.swappiness=새로운_값` 명령을 사용합니다. 이렇게 하면 임시로 swappiness 값을 변경할 수 있습니다. 다시 부팅하면 기본값으로 돌아갑니다.
- swappiness 값을 영구적으로 변경하려면 `/etc/sysctl.conf` 파일을 편집하고 `vm.swappiness=새로운_값`을 추가합니다. 이렇게 하면 시스템이 부팅될 때마다 swappiness 값이 설정됩니다.
3. 변경된 swappiness 값을 적용합니다. 터미널에서 `sudo sysctl -p` 명령을 실행하면 변경된 swappiness 값을 즉시 적용할 수 있습니다.
swappiness 값을 조정할 때는 시스템의 메모리 사용량과 요구 사항을 고려해야 합니다. 일반적으로 메모리가 충분한 경우 swappiness 값을 낮추는 것이 좋습니다. 그러나 메모리가 부족한 경우 swappiness 값을 높여 가상 메모리를 더 많이 사용하도록 설정할 수 있습니다.
끝..!
zswap, zram(램디스크를 만들어서 swap으로 포맷/마운트)등이 았습니다.
압축률이 거의 두배가 되서 8기가면 16은 아니래도 10~ 12기가 처럼 쓸수 있어요.ㅎㅎ
fedora는 36인가 37부터 설치하면 기본으로 zram이 설정 되어있고, 수세는 커널 파라미터에 zswap.enabled=1 넣어주면 바로 가능합니다.
아마 zswap은 커널 모듈이라서 우분투도 zswap-enabled=1 넣어주면 바로 될거예요.
sudo apt update
sudo apt -y upgrade
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo apt-get -y install docker-compose
sudo timedatectl set-timezone Asia/Seoul
sudo fallocate -l 8G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
sudo echo '/swapfile swap swap defaults 0 0' | sudo tee -a /etc/fstab
좋은 스크립트네요!
cmt alert