웹사이트 검색

Ubuntu 16.04에서 스왑 공간을 추가하는 방법


소개

서버의 응답성을 높이고 응용 프로그램의 메모리 부족 오류를 방지하는 가장 쉬운 방법 중 하나는 약간의 스왑 공간을 추가하는 것입니다. 이 가이드에서는 Ubuntu 16.04 서버에 스왑 파일을 추가하는 방법을 설명합니다.

스왑이란 무엇입니까?

스왑은 운영 체제가 더 이상 RAM에 보관할 수 없는 데이터를 임시로 저장할 수 있는 장소로 지정된 하드 드라이브의 영역입니다. 기본적으로 이것은 서버가 작동하는 "메모리\에 보관할 수 있는 정보의 양을 늘릴 수 있는 기능을 제공하지만 몇 가지 주의 사항이 있습니다. 하드 드라이브의 스왑 공간은 주로 RAM에 더 이상 충분한 공간이 없을 때 사용됩니다. 사용 중인 애플리케이션 데이터를 보유합니다.

디스크에 기록된 정보는 RAM에 보관된 정보보다 훨씬 느리지만 운영 체제는 애플리케이션 데이터를 메모리에서 계속 실행하고 이전 데이터에 대해 스왑을 사용하는 것을 선호합니다. 전반적으로 시스템의 RAM이 고갈되었을 때 대비책으로 스왑 공간을 확보하는 것은 비SSD 스토리지를 사용할 수 있는 시스템에서 메모리 부족 예외에 대한 좋은 안전망이 될 수 있습니다.

스왑 정보에 대한 시스템 확인

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

다음을 입력하여 시스템에 구성된 스왑이 있는지 확인할 수 있습니다.

  1. sudo swapon --show

출력이 반환되지 않으면 시스템에 현재 사용 가능한 스왑 공간이 없음을 의미합니다.

무료 유틸리티를 사용하여 활성 스왑이 없는지 확인할 수 있습니다.

  1. free -h
Output
total used free shared buff/cache available Mem: 488M 36M 104M 652K 348M 426M Swap: 0B 0B 0B

출력의 "Swap\ 행에서 볼 수 있듯이 시스템에서 활성화된 스왑이 없습니다.

하드 드라이브 파티션의 사용 가능한 공간 확인

스왑을 위한 공간을 할당하는 가장 일반적인 방법은 작업 전용으로 별도의 파티션을 사용하는 것입니다. 그러나 파티션 구성표를 변경하는 것이 항상 가능한 것은 아닙니다. 기존 파티션에 상주하는 스왑 파일을 쉽게 만들 수 있습니다.

이 작업을 수행하기 전에 다음을 입력하여 현재 디스크 사용량을 확인해야 합니다.

  1. df -h
Output
Filesystem Size Used Avail Use% Mounted on udev 238M 0 238M 0% /dev tmpfs 49M 624K 49M 2% /run /dev/vda1 20G 1.1G 18G 6% / tmpfs 245M 0 245M 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 245M 0 245M 0% /sys/fs/cgroup tmpfs 49M 0 49M 0% /run/user/1001

이 경우 /dev 아래의 장치가 디스크입니다. 이 예에서는 사용 가능한 공간이 충분합니다(1.1G만 사용됨). 당신의 사용법은 아마 다를 것입니다.

스왑 공간의 적절한 크기에 대해 많은 의견이 있지만 실제로는 개인의 기본 설정과 응용 프로그램 요구 사항에 따라 다릅니다. 일반적으로 시스템의 RAM 양과 같거나 두 배의 양이 좋은 출발점입니다. 또 다른 좋은 경험 법칙은 4G 이상의 스왑은 RAM 폴백으로만 사용하는 경우 불필요할 수 있다는 것입니다.

스왑 파일 생성

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

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

이 예제의 서버에는 512MB의 RAM이 있으므로 이 가이드에서는 1GB 파일을 생성합니다. 자신의 서버 요구 사항에 맞게 조정하십시오.

  1. sudo fallocate -l 1G /swapfile

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

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

우리의 파일은 올바른 양의 공간을 따로 설정하여 생성되었습니다.

스왑 파일 활성화

이제 올바른 크기의 파일을 사용할 수 있으므로 실제로 이를 스왑 공간으로 전환해야 합니다.

먼저 루트 권한이 있는 사용자만 콘텐츠를 읽을 수 있도록 파일의 권한을 잠가야 합니다. 이렇게 하면 일반 사용자가 파일에 액세스할 수 없게 되어 보안에 중대한 영향을 미칠 수 있습니다.

다음을 입력하여 root에서만 파일에 액세스할 수 있도록 합니다.

  1. sudo chmod 600 /swapfile

다음을 입력하여 권한 변경을 확인합니다.

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

보시다시피 루트 사용자만 읽기 및 쓰기 플래그를 사용할 수 있습니다.

이제 다음을 입력하여 파일을 스왑 공간으로 표시할 수 있습니다.

  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

다음을 입력하여 스왑이 가능한지 확인할 수 있습니다.

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

free 유틸리티의 출력을 다시 확인하여 결과를 확인할 수 있습니다.

  1. free -h
Output
total used free shared buff/cache available Mem: 488M 37M 96M 652K 354M 425M Swap: 1.0G 0B 1.0G

스왑이 성공적으로 설정되었으며 운영 체제가 필요에 따라 스왑을 사용하기 시작합니다.

스왑 파일을 영구적으로 만들기

최근 변경 사항으로 인해 현재 세션에 대한 스왑 파일이 활성화되었습니다. 그러나 재부팅하면 서버가 스왑 설정을 자동으로 유지하지 않습니다. 스왑 파일을 /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

스왑 설정 조정

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

교환 속성 조정

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

값이 0에 가까우면 커널은 꼭 필요한 경우가 아니면 데이터를 디스크로 스왑하지 않습니다. 스왑 파일과의 상호 작용은 RAM과의 상호 작용보다 훨씬 오래 걸리고 성능이 크게 저하될 수 있다는 점에서 "비싸다\는 점을 기억하십시오. 시스템에 스왑에 크게 의존하지 않도록 지시하면 일반적으로 시스템 속도가 빨라집니다.

100에 가까운 값은 더 많은 RAM 공간을 확보하기 위해 더 많은 데이터를 스왑에 넣으려고 합니다. 애플리케이션의 메모리 프로필이나 서버를 무엇에 사용하는지에 따라 어떤 경우에는 이 방법이 더 나을 수도 있습니다.

다음을 입력하여 현재 교환 값을 볼 수 있습니다.

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

데스크탑의 경우 교환 설정 60은 나쁜 값이 아닙니다. 서버의 경우 0에 가깝게 이동할 수 있습니다.

sysctl 명령을 사용하여 교환을 다른 값으로 설정할 수 있습니다.

예를 들어 swappiness를 10으로 설정하려면 다음과 같이 입력할 수 있습니다.

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

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

  1. sudo nano /etc/sysctl.conf

하단에서 다음을 추가할 수 있습니다.

vm.swappiness=10

완료되면 파일을 저장하고 닫습니다.

캐시 압력 설정 조정

수정할 수 있는 또 다른 관련 값은 vfs_cache_pressure입니다. 이 설정은 시스템이 다른 데이터에 대해 inode 및 dentry 정보를 캐시하도록 선택하는 정도를 구성합니다.

기본적으로 이것은 파일 시스템에 대한 액세스 데이터입니다. 이것은 일반적으로 조회하는 데 비용이 많이 들고 매우 자주 요청되므로 시스템에서 캐시하는 것이 좋습니다. 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

하단에 새 값을 지정하는 줄을 추가합니다.

vm.vfs_cache_pressure=50

완료되면 파일을 저장하고 닫습니다.

결론

이 가이드의 단계를 따르면 그렇지 않으면 메모리 부족 예외가 발생할 수 있는 경우 약간의 여유가 생깁니다. 스왑 공간은 이러한 일반적인 문제 중 일부를 피하는 데 매우 유용할 수 있습니다.

OOM(메모리 부족) 오류가 발생하거나 시스템에서 필요한 응용 프로그램을 사용할 수 없는 경우 최상의 솔루션은 응용 프로그램 구성을 최적화하거나 서버를 업그레이드하는 것입니다.