우분투 22.04에 스왑 공간 추가하는 방법

소개

애플리케이션에서 메모리 부족 오류를 방지하는 한 가지 방법은 서버에 일부 스왑 공간을 추가하는 것입니다. 이 가이드에서는 Ubuntu 22.04 서버에 스왑 파일을 추가하는 방법에 대해 다룰 것입니다.

스왑이란?

스왑은 운영 체제가 RAM에 더 이상 보유할 수 없는 데이터를 일시적으로 저장하기 위해 설정된 하드 드라이브 저장 공간의 일부입니다. 이를 통해 서버가 작업 메모리에 보유할 수 있는 정보량을 증가시킬 수 있지만, 몇 가지 주의사항이 있습니다. 하드 드라이브의 스왑 공간은 RAM에 충분한 공간이 없을 때에 주로 사용됩니다.

디스크에 쓰여진 정보는 RAM에 보관된 정보보다 상당히 느릴 수 있지만, 운영 체제는 메모리에 계속해서 실행 중인 응용 프로그램 데이터를 유지하고 이전 데이터에 대해서는 스왑을 사용할 것입니다. 즉, 시스템의 RAM이 고갈될 때 스왑 공간을 가지고 있는 것은 SSD 스토리지가 있는 시스템에서 메모리 부족 예외에 대한 안전망으로 유용할 수 있습니다.

단계 1 – 스왑 정보 확인

시작하기 전에 시스템에 이미 일부 스왑 공간이 있는지 확인할 수 있습니다. 여러 개의 스왑 파일이나 스왑 파티션을 가질 수 있지만 일반적으로 하나면 충분합니다.

시스템에 구성된 스왑이 있는지 확인하려면 다음을 입력하십시오:

  1. sudo swapon --show

출력이 없으면 현재 시스템에 스왑 공간이 없는 것입니다.

활성 스왑이 없음을 확인할 수 있습니다. free 유틸리티를 사용하여 확인할 수 있습니다:

  1. free -h
Output
total used free shared buff/cache available Mem: 981Mi 122Mi 647Mi 0.0Ki 211Mi 714Mi Swap: 0B 0B 0B

출력의 Swap 행에서 시스템에 활성 스왑이 없음을 확인할 수 있습니다.

단계 2 – 하드 드라이브 파티션에서 사용 가능한 공간 확인

스왑 파일을 생성하기 전에 현재 디스크 사용량을 확인하여 충분한 공간이 있는지 확인합니다. 다음을 입력하여 확인합니다:

  1. df -h
Output
Filesystem Size Used Avail Use% Mounted on udev 474M 0 474M 0% /dev tmpfs 99M 932K 98M 1% /run /dev/vda1 25G 1.4G 23G 7% / tmpfs 491M 0 491M 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 491M 0 491M 0% /sys/fs/cgroup /dev/vda15 105M 3.9M 101M 4% /boot/efi /dev/loop0 55M 55M 0 100% /snap/core18/1705 /dev/loop1 69M 69M 0 100% /snap/lxd/14804 /dev/loop2 28M 28M 0 100% /snap/snapd/7264 tmpfs 99M 0 99M 0% /run/user/1000

Mounted on 열에서 /가 있는 장치가 이 경우에는 디스크입니다. 이 예제에서는 충분한 공간이 있습니다(사용량은 1.4G만 사용됨). 사용량은 다를 수 있습니다.

서랍 공간의 적절한 크기에 대한 다양한 의견이 있지만, 실제로는 개인의 선호도와 응용 프로그램 요구 사항에 따라 다릅니다. 일반적으로 시스템의 RAM 양과 동일하거나 두 배의 양이 좋은 시작점입니다. 또 다른 좋은 지침은 RAM 대체로 사용하는 경우 4G 이상의 스왑이 아마도 불필요하다는 것입니다.

단계 3 – 스왑 파일 생성

이제 사용 가능한 하드 드라이브 공간을 알았으므로 파일 시스템에 스왑 파일을 생성할 수 있습니다. 루트(/) 디렉터리에 원하는 크기의 파일을 할당하겠습니다. swapfile이라는 이름의 파일을 생성합니다.

스왑 파일을 생성하는 가장 좋은 방법은 fallocate 프로그램을 사용하는 것입니다. 이 명령은 지정된 크기의 파일을 즉시 생성합니다.

예를 들어, 우리 예제의 서버가 1G의 RAM을 가지고 있으므로 이 가이드에서는 1G 파일을 만들 것입니다. 필요에 맞게 조정하십시오:

  1. sudo fallocate -l 1G /swapfile

다음을 입력하여 올바른 양의 공간이 예약되었는지 확인할 수 있습니다:

  1. ls -lh /swapfile
  1. -rw-r--r-- 1 root root 1.0G Apr 25 11:14 /swapfile

파일이 올바른 양의 공간으로 생성되었습니다.

단계 4 – 스왑 파일 활성화

이제 올바른 크기의 파일이 준비되었으므로이를 스왑 공간으로 실제로 변환해야합니다.

먼저 파일의 권한을 잠그어 일반 사용자가 파일에 액세스하지 못하도록해야합니다. 이렇게하면 보안상의 중대한 문제가 발생할 수 있습니다.root 권한을 가진 사용자만 내용을 읽을 수 있도록 파일에 액세스 할 수 있도록 권한을 설정합니다.

root 사용자만 파일에 액세스 할 수 있도록 설정하십시오. 다음과 같이 입력하십시오:

  1. sudo chmod 600 /swapfile

권한 변경을 확인하려면 다음을 입력하십시오:

  1. ls -lh /swapfile
Output
-rw------- 1 root root 1.0G Apr 25 11:14 /swapfile

볼 수 있듯이, 읽기 및 쓰기 권한이 root 사용자에게만 허용됩니다.이제 파일을 스왑 공간으로 표시할 수 있습니다. 다음을 입력하십시오:

파일을 표시 한 후 스왑 파일을 활성화하여 시스템이 그것을 사용할 수 있게합니다:

  1. sudo mkswap /swapfile
Output
Setting up swapspace version 1, size = 1024 MiB (1073737728 bytes) no label, UUID=6e965805-2ab9-450f-aed6-577e74089dbf

스왑이 사용 가능한지 확인하려면 다음을 입력하십시오:

  1. sudo swapon /swapfile

결과를 확인하기 위해 free 유틸리티의 출력을 다시 확인할 수 있습니다:

  1. sudo swapon --show
Output
NAME TYPE SIZE USED PRIO /swapfile file 1024M 0B -2

스왑이 성공적으로 설정되었으며 운영 체제가 필요할 때 사용하기 시작할 것입니다.

  1. free -h
Output
total used free shared buff/cache available Mem: 981Mi 123Mi 644Mi 0.0Ki 213Mi 714Mi Swap: 1.0Gi 0B 1.0Gi

단계 5 – 스왑 파일을 영구적으로 설정하기

최근 변경 사항으로 현재 세션에서 스왑 파일을 활성화했습니다. 그러나 재부팅하면 서버가 자동으로 스왑 설정을 유지하지 않습니다. 이를 해결하기 위해 스왑 파일을 /etc/fstab 파일에 추가할 수 있습니다.

/etc/fstab 파일을 백업하여 문제가 발생할 경우를 대비합니다:

  1. sudo cp /etc/fstab /etc/fstab.bak

/etc/fstab 파일의 끝에 스왑 파일 정보를 추가하십시오:

  1. echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

다음으로 스왑 공간을 조정할 수 있는 몇 가지 설정을 검토하겠습니다.

단계 6 – 스왑 설정 조정

스왑 처리 시 시스템 성능에 영향을 미칠 수 있는 몇 가지 옵션을 구성할 수 있습니다.

스왑니스 속성 조정

swappiness 매개변수는 시스템이 RAM에서 데이터를 스왑 공간으로 교체하는 빈도를 구성합니다. 이 값은 0부터 100 사이의 백분율을 나타냅니다.

값이 거의 0에 가까운 경우, 커널은 데이터를 디스크로 스왑하지 않습니다. 절대적으로 필요할 때까지입니다. 스왑 파일과의 상호 작용은 RAM과의 상호 작용보다 훨씬 오래 걸리며 성능을 크게 저하시킬 수 있습니다. 시스템에 스왑을 많이 의존하지 않도록 지시하는 것은 일반적으로 시스템을 더 빠르게 만듭니다.

값이 100에 가까운 경우, 더 많은 데이터를 스왑에 넣으려고 합니다. 더 많은 RAM 공간을 비우기 위해서입니다. 애플리케이션의 메모리 프로필이나 서버 사용 목적에 따라 경우에 따라 이것이 더 나을 수 있습니다.

우리는 다음을 입력하여 현재 swappiness 값을 볼 수 있습니다:

  1. cat /proc/sys/vm/swappiness
Output
60

데스크톱의 경우, swappiness 설정이 60이면 꽤 괜찮은 값입니다. 서버의 경우 0에 가깝게 조정하는 것이 좋습니다.

우리는 sysctl 명령을 사용하여 swappiness를 다른 값으로 설정할 수 있습니다.

예를 들어, swappiness를 10으로 설정하려면 다음을 입력할 수 있습니다:

  1. sudo sysctl vm.swappiness=10
Output
vm.swappiness = 10

이 설정은 다음 재부팅까지 유지됩니다. /etc/sysctl.conf 파일에 해당 줄을 추가하여 다시 시작할 때 이 값을 자동으로 설정할 수 있습니다:

  1. sudo nano /etc/sysctl.conf

가장 아래에 다음을 추가할 수 있습니다:

/etc/sysctl.conf
vm.swappiness=10

작업이 완료되면 파일을 저장하고 닫으십시오.

캐시 압력 설정 조정

수정할 수 있는 다른 관련 값은 vfs_cache_pressure입니다. 이 설정은 시스템이 다른 데이터보다 inodedentry 정보를 얼마나 많이 캐시할지 구성합니다.

기본적으로 이것은 파일 시스템에 대한 액세스 데이터입니다. 이를 찾는 것은 일반적으로 매우 비용이 많이 들고 매우 자주 요청되므로 시스템이 캐시하는 것이 훌륭합니다. 다시 proc 파일 시스템을 쿼리하여 현재 값을 볼 수 있습니다:

  1. cat /proc/sys/vm/vfs_cache_pressure
Output
100

현재 시스템 구성에서는 시스템이 캐시에서 inode 정보를 너무 빨리 제거합니다. 이를 50과 같은 보수적인 설정으로 변경할 수 있습니다.

  1. sudo sysctl vm.vfs_cache_pressure=50
Output
vm.vfs_cache_pressure = 50

다시 말하지만, 이것은 현재 세션에만 유효합니다. 이를 우리의 swappiness 설정과 같은 설정 파일에 추가하여 변경할 수 있습니다:

  1. sudo nano /etc/sysctl.conf

아래에 새 값을 지정하는 줄을 추가하십시오:

/etc/sysctl.conf
vm.vfs_cache_pressure=50

작업을 마치면 파일을 저장하고 닫으십시오.

결론

이 안내서의 단계를 따르면 메모리 부족 예외가 발생할 수 있는 상황에서 숨을 쉴 수 있는 여유를 얻을 수 있습니다. 스왑 공간은 이러한 일반적인 문제를 피하는 데 매우 유용할 수 있습니다.

만약 메모리 부족(OOM) 오류에 직면하거나 필요한 응용 프로그램을 사용할 수 없는 경우, 최선의 해결책은 응용 프로그램 설정을 최적화하거나 서버를 업그레이드하는 것입니다.

Source:
https://www.digitalocean.com/community/tutorials/how-to-add-swap-space-on-ubuntu-22-04