리눅스 스왑 메모리(Swap Memory)
스왑 메모리(Swap Memory)는 컴퓨터의 주 메모리(RAM)가 모두 사용되어 추가적인 메모리가 필요한 경우 사용되는 보조 메모리입니다. 주 메모리가 가득 차거나 시스템이 더 많은 메모리를 필요로 할 때, 운영 체제는 일부 데이터를 주 메모리에서 디스크의 스왑 영역(일반적으로 하드 디스크의 특정 파티션 또는 스왑 파일)으로 옮김으로써 메모리 부족 상태를 해소합니다.
스왑 메모리는 물리적인 RAM보다 훨씬 느리기 때문에, 주 메모리보다 액세스 속도가 느리지만 시스템의 안정성과 성능을 유지하는 데 중요한 역할을 합니다. 스왑 메모리를 사용하는 것은 시스템에 더 많은 프로세스를 동시에 실행할 수 있도록 하며, 실제 메모리 크기보다 큰 프로그램을 실행하는 데 도움이 됩니다.
스왑 메모리의 단점은 데이터 전송 속도가 느리기 때문에 스왑 영역으로 데이터를 옮기는 작업이 발생하면 성능 저하가 일어날 수 있다는 것입니다. 따라서 스왑이 빈번하게 발생한다면, 시스템이 더 많은 RAM이 필요하다는 신호일 수 있습니다. 즉, 스왑이 자주 발생하는 경우에는 더 많은 물리적인 RAM을 추가하는 것이 성능 향상에 도움이 될 수 있습니다.
현대의 컴퓨터는 보통 상대적으로 큰 용량의 RAM을 갖고 있으므로 스왑이 자주 발생하는 경우는 그리 흔하지 않지만, 여전히 메모리 관리는 중요한 주제이며, 시스템 성능과 안정성에 영향을 미치는 요소 중 하나입니다.
리눅스에서 스왑 영역 및 메모리 사용 상태를 확인하는 방법
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 사용 통계, 페이지 교체 통계 등 시스템 상태와 관련된 여러 통계 정보를 포함합니다.
위 명령어를 실행하면 시스템의 상태가 실시간으로 갱신되며 메모리와 스왑 영역 사용량도 확인할 수 있습니다.
스왑 영역(메모리) 초기화
스왑 영역(스왑 메모리)을 초기화하려면 해당 스왑 파티션 또는 스왑 파일을 언마운트하고 비워야 합니다. 이렇게 하면 스왑 영역에 저장된 데이터가 삭제되고, 새로운 데이터가 스왑에 쓰일 수 있게 됩니다. 초기화하기 전에 스왑 영역을 사용 중인지 확인하고, 사용 중이라면 시스템에서 해당 스왑을 해제하고 비워야 합니다.
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
'리눅스' 카테고리의 다른 글
리눅스 Load Average (0) | 2021.05.26 |
---|---|
리눅스 메모리 스와핑(swapping) (0) | 2021.05.25 |
리눅스에서 네트워크 어댑터의 MTU를 변경하는 방법(Adapter MTU 변경) (0) | 2021.05.25 |
lftp와 FileZilla를 사용한 FTPS 클라이언트 설정 방법 (1) | 2021.05.18 |
FTPS(FTP + SSL/TLS) 서버를 구성하는 방법(vsftpd) (0) | 2021.05.18 |