웹사이트 검색

Ubuntu 14.04에서 스왑을 추가하는 방법


소개

서버의 응답성을 높이고 애플리케이션의 메모리 부족 오류를 방지하는 가장 쉬운 방법 중 하나는 일부 스왑 공간을 추가하는 것입니다. 스왑은 운영 체제가 더 이상 RAM에 보관할 수 없는 데이터를 임시로 저장할 수 있는 장소로 지정된 하드 드라이브의 영역입니다.

기본적으로 이것은 서버가 작동하는 "메모리\에 보관할 수 있는 정보의 양을 늘릴 수 있는 기능을 제공하지만 몇 가지 주의 사항이 있습니다. 하드 드라이브의 공간은 주로 RAM의 공간이 더 이상 데이터에 충분하지 않을 때 사용됩니다. .

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

이 가이드에서는 Ubuntu 14.04 서버에서 스왑 파일을 만들고 활성화하는 방법을 다룹니다.

스왑은 일반적으로 기존의 회전하는 하드 드라이브를 사용하는 시스템에 권장되지만 SSD와 함께 스왑을 사용하면 시간이 지남에 따라 하드웨어 성능이 저하되는 문제가 발생할 수 있습니다. 이러한 고려 사항으로 인해 DigitalOcean 또는 SSD 스토리지를 활용하는 다른 공급자에서 스왑을 활성화하지 않는 것이 좋습니다. 그렇게 하면 귀하와 귀하의 이웃에 대한 기본 하드웨어의 안정성에 영향을 미칠 수 있습니다.

서버의 성능을 개선해야 하는 경우 Droplet을 업그레이드하는 것이 좋습니다. 이렇게 하면 일반적으로 더 나은 결과를 얻을 수 있으며 서비스에 영향을 줄 수 있는 하드웨어 문제에 기여할 가능성이 줄어듭니다.

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

시작하기 전에 운영 체제를 살펴보고 이미 사용 가능한 스왑 공간이 있는지 확인합니다. 여러 스왑 파일이나 스왑 파티션을 가질 수 있지만 일반적으로 하나면 충분합니다.

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

sudo swapon -s
Filename				Type		Size	Used	Priority

위에 표시된 대로 테이블의 헤더만 반환하는 경우 현재 활성화된 스왑 공간이 없습니다.

스왑 공간을 확인하는 더 친숙한 또 다른 방법은 시스템 메모리 사용량을 보여주는 free 유틸리티를 사용하는 것입니다. 다음을 입력하여 현재 메모리 및 스왑 사용량을 메가바이트 단위로 볼 수 있습니다.

<예비>

위에서 볼 수 있듯이 시스템의 총 스왑 공간은 "0”입니다. 이것은 이전 명령에서 본 것과 일치합니다.

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

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

이를 수행하기 전에 현재 디스크 사용량을 알고 있어야 합니다. 다음을 입력하여 이 정보를 얻을 수 있습니다.

<예비>

첫 번째 줄에서 볼 수 있듯이 하드 드라이브 파티션에는 55GB의 사용 가능한 공간이 있으므로 작업할 수 있는 공간이 엄청납니다. 그러나 이것은 새로운 중간 크기의 VPS 인스턴스에 있으므로 실제 사용량은 매우 다를 수 있습니다.

스왑 공간의 적절한 크기에 대해 많은 의견이 있지만 실제로는 개인의 기본 설정과 응용 프로그램 요구 사항에 따라 다릅니다. 일반적으로 시스템의 RAM 양과 같거나 두 배의 양이 좋은 출발점입니다.

내 시스템에는 4GB의 RAM이 있고 두 배로 늘리면 내 디스크 공간의 상당 부분을 차지하므로 내 시스템의 RAM과 일치하도록 4GB의 스왑 공간을 만듭니다.

스왑 파일 생성

이제 사용 가능한 하드 드라이브 공간을 알았으므로 파일 시스템 내에서 스왑 파일을 생성할 수 있습니다.

루트(/) 디렉토리에 swapfile이라는 파일을 생성합니다. 파일은 스왑 파일에 필요한 공간을 할당해야 합니다. 이를 수행하는 두 가지 주요 방법이 있습니다.

전통적이고 느린 방식

전통적으로 dd 명령을 사용하여 미리 할당된 공간이 있는 파일을 만들었습니다. 이 다목적 디스크 유틸리티는 한 위치에서 다른 위치로 기록합니다.

이것을 사용하여 Linux 시스템의 /dev/zero에 있는 특수 장치에서 파일에 0을 쓸 수 있습니다.

블록 크기에 대한 bs와 블록 수에 대한 count의 조합을 사용하여 파일 크기를 지정합니다. 우리가 각 매개변수에 할당하는 것은 거의 전적으로 임의적입니다. 중요한 것은 그것들을 곱한 결과가 무엇인지입니다.

예를 들어, 이 예에서는 4GB 파일을 생성하려고 합니다. 블록 크기를 1기가바이트로 지정하고 개수를 4로 지정하여 이를 수행할 수 있습니다.

sudo dd if=/dev/zero of=/swapfile bs=1G count=4
4+0 records in
4+0 records out
4294967296 bytes (4.3 GB) copied, 18.6227 s, 231 MB/s

of(출력 파일을 나타냄)가 잘못된 위치를 가리키면 데이터가 손상될 가능성이 있으므로 ENTER를 누르기 전에 명령을 확인하십시오.

다음을 입력하면 4GB가 할당되었음을 알 수 있습니다.

<예비>

위의 명령을 완료했다면 시간이 꽤 걸린다는 것을 알 수 있습니다. 사실 출력에서 내 시스템이 파일을 만드는 데 18초가 걸렸다는 것을 알 수 있습니다. 디스크에 4GB의 0을 써야 하기 때문입니다.

파일을 더 빨리 만드는 방법을 알고 싶다면 파일을 제거하고 아래를 따르십시오.

sudo rm /swapfile

더 빠른 방법

동일한 파일을 얻는 더 빠른 방법은 fallocate 프로그램을 사용하는 것입니다. 이 명령은 실제로 더미 콘텐츠를 쓰지 않고도 미리 할당된 크기의 파일을 즉시 만듭니다.

다음을 입력하여 4GB 파일을 만들 수 있습니다.

sudo fallocate -l 4G /swapfile

프롬프트가 거의 즉시 반환됩니다. 다음을 입력하여 올바른 양의 공간이 예약되었는지 확인할 수 있습니다.

<예비>

보시다시피 파일은 올바른 양의 공간을 따로 설정하여 생성됩니다.

스왑 파일 활성화

지금 우리 파일이 생성되었지만 우리 시스템은 이것이 스왑에 사용되어야 한다는 것을 모릅니다. 이 파일을 스왑으로 포맷한 다음 활성화하도록 시스템에 지시해야 합니다.

하지만 그렇게 하기 전에 루트 이외의 사람이 읽을 수 없도록 파일에 대한 권한을 조정해야 합니다. 다른 사용자가 이 파일을 읽거나 쓰도록 허용하면 엄청난 보안 위험이 발생합니다. 다음을 입력하여 권한을 잠글 수 있습니다.

sudo chmod 600 /swapfile

다음을 입력하여 파일에 올바른 권한이 있는지 확인하십시오.

<예비>

보시다시피 루트 사용자의 열에만 읽기 및 쓰기 플래그가 활성화되어 있습니다.

이제 파일이 더 안전해졌으므로 다음을 입력하여 스왑 공간을 설정하도록 시스템에 지시할 수 있습니다.

sudo mkswap /swapfile
Setting up swapspace version 1, size = 4194300 KiB
no label, UUID=e2f1e9cf-c0a9-4ed4-b8ab-714b8a7d6944

이제 파일을 스왑 공간으로 사용할 준비가 되었습니다. 다음을 입력하여 활성화할 수 있습니다.

sudo swapon /swapfile

시스템이 지금 스왑 공간을 보고하는지 확인하여 절차가 성공했는지 확인할 수 있습니다.

<예비>

여기에 새로운 스왑 파일이 있습니다. 무료 유틸리티를 다시 사용하여 결과를 확인할 수 있습니다.

<예비>

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

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

스왑 파일을 활성화했지만 재부팅하면 서버가 파일을 자동으로 활성화하지 않습니다. fstab 파일을 수정하여 변경할 수 있습니다.

텍스트 편집기에서 루트 권한으로 파일을 편집합니다.

sudo nano /etc/fstab

파일 맨 아래에 생성한 파일을 자동으로 사용하도록 운영 체제에 알리는 행을 추가해야 합니다.

/swapfile   none    swap    sw    0   0

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

스왑 설정 조정

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

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

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

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

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

cat /proc/sys/vm/swappiness
60

데스크탑의 경우 교환 설정 60은 나쁜 값이 아닙니다. VPS 시스템의 경우 아마도 0에 가깝게 이동하고 싶을 것입니다.

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

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

sudo sysctl vm.swappiness=10
vm.swappiness = 10

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

sudo nano /etc/sysctl.conf

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

vm.swappiness=10

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

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

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

cat /proc/sys/vm/vfs_cache_pressure
100

현재 구성되어 있기 때문에 우리 시스템은 캐시에서 inode 정보를 너무 빨리 제거합니다. 다음을 입력하여 50과 같은 보다 보수적인 설정으로 설정할 수 있습니다.

sudo sysctl vm.vfs_cache_pressure=50
vm.vfs_cache_pressure = 50

다시 말하지만 이것은 현재 세션에만 유효합니다. swappiness 설정에서 했던 것처럼 구성 파일에 추가하여 변경할 수 있습니다.

sudo nano /etc/sysctl.conf

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

vm.vfs_cache_pressure = 50

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

결론

이 가이드의 단계를 따르면 RAM 사용량 측면에서 약간의 여유가 생깁니다. 스왑 공간은 몇 가지 일반적인 문제를 피하는 데 매우 유용합니다.

OOM(메모리 부족) 오류가 발생하거나 시스템에서 필요한 응용 프로그램을 사용할 수 없는 경우 최상의 솔루션은 응용 프로그램 구성을 최적화하거나 서버를 업그레이드하는 것입니다. 그러나 스왑 공간을 구성하면 더 많은 유연성을 얻을 수 있으며 덜 강력한 서버에서 시간을 벌 수 있습니다.

저스틴 엘링우드