본문 바로가기

리눅스

리눅스 스왑 메모리(Swap Memory)

728x90

리눅스 스왑 메모리(Swap Memory)

스왑 메모리(Swap Memory)는 컴퓨터의 주 메모리(RAM)가 모두 사용되어 추가적인 메모리가 필요한 경우 사용되는 보조 메모리입니다. 주 메모리가 가득 차거나 시스템이 더 많은 메모리를 필요로 할 때, 운영 체제는 일부 데이터를 주 메모리에서 디스크의 스왑 영역(일반적으로 하드 디스크의 특정 파티션 또는 스왑 파일)으로 옮김으로써 메모리 부족 상태를 해소합니다.

 

스왑 메모리는 물리적인 RAM보다 훨씬 느리기 때문에, 주 메모리보다 액세스 속도가 느리지만 시스템의 안정성과 성능을 유지하는 데 중요한 역할을 합니다. 스왑 메모리를 사용하는 것은 시스템에 더 많은 프로세스를 동시에 실행할 수 있도록 하며, 실제 메모리 크기보다 큰 프로그램을 실행하는 데 도움이 됩니다.

 

스왑 메모리의 단점은 데이터 전송 속도가 느리기 때문에 스왑 영역으로 데이터를 옮기는 작업이 발생하면 성능 저하가 일어날 수 있다는 것입니다. 따라서 스왑이 빈번하게 발생한다면, 시스템이 더 많은 RAM이 필요하다는 신호일 수 있습니다. 즉, 스왑이 자주 발생하는 경우에는 더 많은 물리적인 RAM을 추가하는 것이 성능 향상에 도움이 될 수 있습니다.

 

현대의 컴퓨터는 보통 상대적으로 큰 용량의 RAM을 갖고 있으므로 스왑이 자주 발생하는 경우는 그리 흔하지 않지만, 여전히 메모리 관리는 중요한 주제이며, 시스템 성능과 안정성에 영향을 미치는 요소 중 하나입니다.

 

출처-https://recoverhdd.com/wp-content/themes/soft/images/blog/swap-file/principle.webp

리눅스에서 스왑 영역 및 메모리 사용 상태를 확인하는 방법

1. free 명령어

free 명령어를 사용하면 현재 시스템의 전체 메모리 및 스왑 영역의 사용 상태를 보여줍니다.

free -h
$ free -h
              total        used        free      shared  buff/cache   available
Mem:           3.7G        3.1G        521M        9.0M        129M        468M
Swap:          4.0G          0B        4.0G
  • 출력 필드 설명
    • total : 시스템에 설치된 총 메모리 용량
    • used : 현재 사용 중인 메모리 용량
    • free : 현재 사용 가능한(free) 메모리 용량
    • shared : 공유 메모리 용량
    • buff/cache : 버퍼(buffer) 및 캐시(cache)에 사용되는 메모리 용량
    • available : 즉시 사용 가능한(available) 메모리 용량. 이 값은 실제 사용 가능한 메모리 용량을 반영하며, 시스템이 추가 메모리를 요청하는 데 사용될 수 있습니다.

위 명령어를 실행하면 사용 가능한 물리적인 메모리(RAM)와 스왑 영역의 크기, 사용 중인 양, 사용 가능한 양 등이 메가바이트(MB) 또는 기가바이트(GB) 단위로 표시됩니다.

2. swapon 명령어

swapon 명령어를 사용하여 현재 활성화된 스왑 영역을 확인할 수 있습니다.

swapon --show
$ swapon -s
Filename                                Type            Size    Used    Priority
/dev/dm-1                               partition       4194300 0       -2

위 명령어를 실행하면, 활성화된 스왑 영역과 해당 영역의 용량이 표시됩니다.

3. /proc/swaps 파일

/proc/swaps 파일에는 현재 시스템에 활성화된 스왑 영역에 대한 정보가 포함되어 있습니다. 파일을 직접 읽어 확인할 수 있습니다.

cat /proc/swaps
$ cat /proc/swaps 
Filename                                Type            Size    Used    Priority
/dev/dm-1                               partition       4194300 0       -2

4. top 또는 htop 명령어

top 명령어 또는 htop 명령어를 사용하여 실시간으로 시스템의 메모리 및 스왑 영역 사용 상태를 모니터링할 수 있습니다.

top

또는 (htop이 설치되어 있는 경우)

htop

또는 (vmstat이 설치되어 있는 경우)

vmstat -s
$ vmstat -s
     37024544 K total memory
     17924776 K used memory
      4842296 K active memory
     25644944 K inactive memory
      3303324 K free memory
         7480 K buffer memory
     15788964 K swap cache
     16777212 K total swap
         8556 K used swap
     16768656 K free swap
     80703009 non-nice user cpu ticks
        56330 nice user cpu ticks
     32451025 system cpu ticks
  12860577821 idle cpu ticks
     21485580 IO-wait cpu ticks
            0 IRQ cpu ticks
       840568 softirq cpu ticks
            0 stolen cpu ticks
      8008880 pages paged in
    358367646 pages paged out
       341129 pages swapped in
      1776783 pages swapped out
    454675945 interrupts
   1552745463 CPU context switches
   1706760923 boot time
    106370269 forks
  • 출력 필드 설명
    • total memory : 총 메모리 용량
    • used memory : 현재 사용 중인 메모리 용량
    • active memory : 활성(active) 메모리 용량. 현재 사용 중인 메모리로, 자주 액세스되는 데이터가 포함됩니다.
    • inactive memory : 비활성(inactive) 메모리 용량. 최근에 사용되지 않은 메모리로, 메모리 액세스가 덜 자주 발생하는 데이터가 포함됩니다.
    • free memory : 현재 사용 가능한(free) 메모리 용량
    • buffer memory : 버퍼(buffer) 메모리 용량
    • swap cache : 스왑 캐시(swap cache) 용량
    • total swap : 총 스왑 용량
    • used swap : 현재 사용 중인 스왑 용량
    • free swap : 현재 사용 가능한(free) 스왑 용량
    • 기타 : CPU 사용 통계, 페이지 교체 통계 등 시스템 상태와 관련된 여러 통계 정보를 포함합니다.

위 명령어를 실행하면 시스템의 상태가 실시간으로 갱신되며 메모리와 스왑 영역 사용량도 확인할 수 있습니다.

728x90

스왑 영역(메모리) 초기화

스왑 영역(스왑 메모리)을 초기화하려면 해당 스왑 파티션 또는 스왑 파일을 언마운트하고 비워야 합니다. 이렇게 하면 스왑 영역에 저장된 데이터가 삭제되고, 새로운 데이터가 스왑에 쓰일 수 있게 됩니다. 초기화하기 전에 스왑 영역을 사용 중인지 확인하고, 사용 중이라면 시스템에서 해당 스왑을 해제하고 비워야 합니다.

1. 스왑 해제

swapoff를 하게 되면 swap out -> swap in 되면서 실제 물리 메모리로 이동한다.

swapoff -a

** 다소 시간이 걸림

$ free -h
              total        used        free      shared  buff/cache   available
Mem:           3.7G        3.1G        525M        8.9M        130M        472M
Swap:            0B          0B          0B

2. 스왑 사용 확인

현재 시스템에서 스왑 영역이 사용 중인지 확인합니다.

swapon -s

3. 스왑 영역 초기화

스왑을 해제한 후에는 해당 스왑 영역을 초기화합니다.

  • 스왑 파티션 초기화
sudo mkswap /dev/{스왑_파티션}
  • 스왑 파일 초기화
sudo truncate -s 0 /path/to/swapfile
sudo chmod 600 /path/to/swapfile
sudo mkswap /path/to/swapfile

위 명령어를 실행하여 스왑 파티션 또는 스왑 파일을 초기화합니다.

4. 스왑 영역 다시 활성화

스왑 영역을 초기화한 후에 다시 활성화합니다.

  • 스왑 파티션 활성화
sudo swapon /dev/{스왑_파티션}
  • 스왑 파일 활성화
sudo swapon /path/to/swapfile

리눅스 시스템에서 스왑 메모리를 조절하는데 사용되는 주요 커널 파라미터(스왑 메모리 사용 빈도 조절)

1. vm.swappiness: 이 값은 시스템이 언제 스왑 메모리를 사용하도록 하는지를 조절합니다.

  • 값의 범위는 0에서 100까지이며, 기본값은 일반적으로 60입니다.
  • vm.swappiness=0: 스왑 메모리를 전혀 사용하지 않음을 의미합니다. RAM이 가득 찬 경우에도 스왑을 사용하지 않습니다.
  • vm.swappiness=100: 시스템이 가능한 한 빠르게 스왑 메모리를 사용하도록 합니다. RAM이 조금이라도 부족하면 스왑을 즉시 사용합니다.

값을 변경하려면 다음과 같이 sysctl 명령어를 사용하거나, /etc/sysctl.conf 파일에 설정을 추가하여 영구적으로 변경할 수 있습니다.

# 현재 swappiness 값을 확인
sysctl vm.swappiness
# swappiness 값을 변경 (영구적으로 적용하려면 /etc/sysctl.conf 파일에도 추가)
sudo sysctl vm.swappiness=10

스왑 메모리 사용 빈도 변경

$ sysctl vm.swappiness=10
vm.swappiness = 10
$ sysctl -w vm.swappiness=10
vm.swappiness = 10
echo 10 > /proc/sys/vm/swappiness

영구 적용 (재부팅 시에 적용됨)

$ vim /etc/sysctl.conf
vm.swappiness = 10

2. vm.vfs_cache_pressure: 이 값은 파일 시스템 캐시가 페이지 캐시(메모리)와 스왑 메모리 간의 교환 비율을 조절합니다.

  • 기본값은 일반적으로 100이며, 값이 높을수록 파일 시스템 캐시를 더 적극적으로 사용하고 스왑을 덜 사용하게 됩니다.
# 현재 vfs_cache_pressure 값을 확인
sysctl vm.vfs_cache_pressure
# vfs_cache_pressure 값을 변경 (영구적으로 적용하려면 /etc/sysctl.conf 파일에도 추가)
sudo sysctl vm.vfs_cache_pressure=50

위의 커널 파라미터를 조절하여 스왑 메모리의 사용 방식을 변경할 수 있습니다. 값의 변경은 시스템의 특정 요구 사항과 하드웨어 성능에 따라 달라질 수 있으며, 변경하기 전에 신중히 고려하고 테스트하는 것이 좋습니다.

 

참고URL

- https://access.redhat.com/solutions/406773

 

728x90