웹사이트 검색

CentOS 7에서 스왑을 추가하는 방법


소개

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

이렇게 하면 몇 가지 주의 사항과 함께 서버가 작업 메모리에 보관할 수 있는 정보의 양을 늘릴 수 있습니다. 스왑에서 읽고 쓰는 것은 메모리를 사용하는 것보다 느리지만 서버의 메모리가 부족할 때 좋은 안전망을 제공할 수 있습니다.

스왑이 없으면 메모리가 부족한 서버는 메모리를 확보하기 위해 응용 프로그램을 종료하거나 심지어 충돌할 수 있습니다. 이로 인해 저장하지 않은 데이터가 손실되거나 다운타임이 발생할 수 있습니다. 신뢰할 수 있는 데이터 액세스를 보장하기 위해 일부 응용 프로그램은 작동하려면 스왑이 필요합니다.

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

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

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

전제 조건

이 가이드를 시작하기 전에 먼저 완료해야 하는 몇 가지 단계가 있습니다.

sudo 권한이 있는 루트가 아닌 사용자로 CentOS 7 서버를 설치 및 구성해야 합니다. 아직 이 작업을 수행하지 않은 경우 CentOS 7 초기 서버 설정 가이드의 1-4단계를 실행하여 이 계정을 만들 수 있습니다.

루트가 아닌 사용자가 있으면 이를 사용하여 CentOS 서버에 SSH로 연결하고 스왑 파일 설치를 계속할 수 있습니다.

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

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

범용 스왑 유틸리티인 swapon을 사용하여 시스템에 구성된 스왑이 있는지 확인할 수 있습니다. -s 플래그를 사용하면 swapon은 저장 장치의 스왑 사용량 및 가용성에 대한 요약을 표시합니다.

swapon -s

명령에서 아무 것도 반환하지 않으면 요약이 비어 있고 스왑 파일이 없는 것입니다.

스왑 공간을 확인하는 또 다른 방법은 시스템의 전체 메모리 사용량을 보여주는 free 유틸리티를 사용하는 것입니다. 다음을 입력하여 현재 메모리 및 스왑 사용량(MB)을 확인할 수 있습니다.

free -m
             total       used       free     shared    buffers     cached
Mem:          3953        315       3637          8         11        107
-/+ buffers/cache:        196       3756
Swap:            0          0       4095

보시다시피 시스템의 총 스왑 공간은 0입니다. 이것은 swapon에서 본 것과 일치합니다.

사용 가능한 저장 공간 확인

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

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

df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        59G  1.5G   55G   3% /
devtmpfs        2.0G     0  2.0G   0% /dev
tmpfs           2.0G     0  2.0G   0% /dev/shm
tmpfs           2.0G  8.3M  2.0G   1% /run
tmpfs           2.0G     0  2.0G   0% /sys/fs/cgroup

참고: -h 플래그는 단순히 dh에게 사람에게 친숙한 읽기 형식으로 드라이브 정보를 출력하도록 지시합니다. 예를 들어 df -h는 파티션의 원시 메모리 블록 수를 출력하는 대신 공간 사용량과 가용성을 M(메가바이트의 경우) 또는 G(기가바이트의 경우)로 알려줍니다.

첫 번째 줄에서 볼 수 있듯이 스토리지 파티션에는 59GB의 사용 가능한 공간이 있으므로 작업할 공간이 상당히 많습니다. 이것은 새로운 중간 크기의 VPS 인스턴스에 있으므로 실제 사용량은 매우 다를 수 있습니다.

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

내 시스템에는 4GB의 메모리가 있고 두 배로 늘리면 내 저장 공간에서 내가 사용하려는 것보다 더 많은 양을 차지하게 되므로 내 시스템의 메모리와 일치하도록 4GB의 스왑 공간을 생성합니다.

스왑 파일 생성

이제 사용 가능한 저장 공간을 알았으므로 파일 시스템 내에서 스왑 파일을 생성할 수 있습니다. 원하는 경우 파일 이름을 다른 이름으로 지정할 수 있지만 루트(/) 디렉토리에 swapfile이라는 파일을 생성합니다. 파일은 스왑 파일에 필요한 공간을 할당해야 하며 하나의 연속 블록에 생성되어야 합니다.

이를 수행하는 가장 좋은 방법은 dd 유틸리티를 사용하는 것입니다. 이 명령은 4GB 파일을 생성합니다.

sudo dd if=/dev/zero of=/swapfile count=4096 bs=1MiB

sudo 권한을 부여하기 위해 비밀번호를 입력하면 스왑 파일이 생성됩니다. 이 작업은 몇 분 정도 걸릴 수 있으며 그 후에 프롬프트가 반환됩니다. ls를 사용하여 올바른 양의 공간이 스왑용으로 예약되었는지 확인할 수 있습니다.

ls -lh /swapfile
-rw-r--r-- 1 root root 4.0G Oct 30 11:00 /swapfile

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

스왑 파일 활성화

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

그 전에 루트 계정 이외의 사람이 읽을 수 없도록 스왑 파일에 대한 권한을 조정해야 합니다. 다른 사용자가 이 파일을 읽거나 쓰도록 허용하면 엄청난 보안 위험이 발생합니다. chmod로 권한을 잠글 수 있습니다.

sudo chmod 600 /swapfile

이렇게 하면 읽기 및 쓰기 권한이 모두 루트 계정으로만 제한됩니다. ls -lh를 다시 사용하여 스왑 파일에 올바른 권한이 있는지 확인할 수 있습니다.

ls -lh /swapfile
-rw------- 1 root root 4.0G Oct 30 11:00 /swapfile

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

sudo mkswap /swapfile
Setting up swapspace version 1, size = 4194300 KiB
no label, UUID=b99230bb-21af-47bc-8c37-de41129c39bf

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

sudo swapon /swapfile

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

swapon -s
Filename				Type		Size	Used	Priority
/swapfile               file        4194300 0     -1

이 출력은 새 스왑 파일이 있음을 확인합니다. 무료 유틸리티를 다시 사용하여 결과를 확증할 수 있습니다.

free -m
             total       used       free     shared    buffers     cached
Mem:          3953        315       3637          8         11        107
-/+ buffers/cache:        196       3756
Swap:         4095          0       4095

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

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

현재 스왑 파일이 활성화되어 있지만 재부팅하면 서버가 파일을 자동으로 활성화하지 않습니다. 파일 시스템과 파티션을 관리하는 테이블인 fstab 파일을 수정하여 이를 변경할 수 있습니다.

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

sudo nano /etc/fstab

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

/swapfile   swap    swap    sw  0   0

라인 추가가 완료되면 파일을 저장하고 닫을 수 있습니다. 서버는 부팅할 때마다 이 파일을 확인하므로 지금부터 스왑 파일을 사용할 수 있습니다.

스왑 설정 조정(선택 사항)

스왑을 처리할 때 시스템 성능에 영향을 줄 수 있는 몇 가지 옵션을 구성할 수 있습니다. 이러한 구성은 대부분의 경우 선택 사항이며 변경 사항은 애플리케이션 요구 사항과 개인 선호도에 따라 다릅니다.

스와핑

swappiness 매개변수는 시스템이 메모리에서 스왑 공간으로 데이터를 스왑하는 빈도를 결정합니다. 이는 스왑 사용을 트리거할 메모리 사용 비율을 나타내는 0에서 100 사이의 값입니다.

값이 0에 가까우면 시스템은 반드시 필요한 경우가 아니면 데이터를 드라이브로 스왑하지 않습니다. 스왑 파일과의 상호 작용은 메모리와의 상호 작용보다 훨씬 느리다는 점에서 "비싸다\는 점을 기억하십시오. 이러한 읽기 및 쓰기 속도의 차이는 응용 프로그램의 성능을 크게 저하시킬 수 있습니다. 많이 바꾸면 일반적으로 시스템이 더 빨라집니다.

100에 가까운 값은 더 많은 메모리를 확보하기 위해 더 많은 데이터를 스왑에 넣으려고 합니다. 애플리케이션의 메모리 프로필 또는 서버를 사용하는 대상에 따라 어떤 경우에는 이것이 더 나은 선택일 수 있습니다.

swappiness 구성 파일을 읽어서 현재 swappiness 값을 볼 수 있습니다.

cat /proc/sys/vm/swappiness
30

CentOS 7은 대부분의 데스크톱 및 로컬 서버에 대해 공정한 중간 지점인 30의 스왑 설정으로 기본 설정되어 있습니다. VPS 시스템의 경우 아마도 0에 가깝게 이동하고 싶을 것입니다.

sysctl 명령을 사용하여 교환을 다른 값으로 설정할 수 있습니다. 예를 들어 swappiness를 10으로 설정하려면 다음과 같이 입력할 수 있습니다.

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

이 설정은 다음에 재부팅할 때까지 유지됩니다. 재부팅 사이에 설정을 유지하려면 sysctl 구성 파일에 출력 라인을 추가할 수 있습니다.

sudo nano /etc/sysctl.conf

파일 맨 아래에 swappiness 설정을 추가합니다.

vm.swappiness = 10

라인 추가가 완료되면 파일을 저장하고 닫을 수 있습니다. 이제 서버는 자동으로 각 부팅 시 선언한 값으로 교체를 설정합니다.

캐시 압력

수정할 수 있는 또 다른 관련 값은 vfs_cache_pressure입니다. 이 설정은 특수 파일 시스템 메타데이터 항목의 저장에 영향을 미칩니다. 이 정보를 지속적으로 읽고 새로 고치는 것은 일반적으로 비용이 많이 들기 때문에 캐시에 더 오래 저장하는 것이 시스템 성능에 탁월합니다.

proc 파일 시스템을 다시 쿼리하여 이 캐시 압력의 현재 값을 볼 수 있습니다.

cat /proc/sys/vm/vfs_cache_pressure
100

현재 구성된 대로 우리 시스템은 너무 빨리 캐시에서 inode 정보를 제거합니다. sysctl을 사용하여 50과 같이 보다 보수적인 설정으로 설정할 수 있습니다.

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

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

sudo nano /etc/sysctl.conf

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

vm.vfs_cache_pressure = 50

라인 추가가 완료되면 파일을 저장하고 닫을 수 있습니다. 이제 서버는 자동으로 각 부팅 시 선언한 값으로 캐시 압력을 설정합니다.

결론

이 가이드의 단계를 따르면 서버에 메모리 사용 측면에서 약간의 여유를 갖게 됩니다. 스왑 공간은 몇 가지 일반적인 문제를 피하는 데 매우 유용합니다.

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