Windows, Linux Memory Swap and Paging

리눅스와 윈도우는 메모리 관리 방법에 대해서 얘기해 보고자 한다. 윈도우와 리눅스는 기본적으로 메모리 관리 체계는 같다. 다만 이를 운용하는 방식이 조금 다르다고 할 수 있다.

Windows / Linux 가상 메모리 관리 – Paging, Swap

윈도우와 리눅스 모두 부족한 메모리를 위해 페이징(paging), 리눅스에서는 스왑(swap)을 통해 부족한 메모리를 보조저장장치인 하드 디스크를 사용하게 된다.

가상 메모리

이를 보통 “가상 메모리“라고 하며, 현재 사용중인 가상 메모리 용량을 확인하기 위해서는 다음과 같은 명령으로 확인이 가능하다.

Linux 가상 메모리 – 확인

리눅스의 경우 free 명령을 통해서 확인할 수 있다.

아래 명령은 메모리 사용량을 Megabyte 단위로 사용량을 표시하는 방법이다.

sudo free -m

total이 전체 사용가능한 swap 메모리이고, used가 현재 사용중인 사용량이며, free가 사용이 가능한 용량이다.
리눅스는 가상 메모리를 파티션으로 관리하므로, swapon 명령을 통해 현재 가상메모리로 설정된 파티션을 확인 할 수 있다.

sudo swapon -s
swapon

리눅스는 스왑을 파티션기반으로 관리한다. fdisk 명령을 이용하여 현재 구성된 Linux의 파티션을 확인 할 수 있다.

fdisk -l
fdisk

위 현재 리눅스 시스템은 스왑 메모리를 사용하고 있지 않다. 윈도우는 시스템을 가동하면 기본적으로 가상메모리를 사용하지만, 리눅스의 경우 바로 사용하지는 않는것 같다. 이유는 리눅스의 경우 기본적으로 물리 메모리를 먼저 사용하고 물리 메모리가 설정한 값보다 부족한 경우 가상 메모리를 사용하는 방식이다. 현재 시스템의 물리 메모리가 설정한 값보다 많이 사용하는 경우 가상 메모리를 사용하게 된다. 그럼 가상 메모리 설정은 어떻게 진행하는 것일까?

Linux – 가상 메모리 설정

리눅스에서 가상 메모리 설정은 /etc/sysctl.conf vm.swappiness 을 설정하여 통해 설정하면 된다.
운영중인 현재 확경에 적용하고자 한다면, /proc/sys/vm/swappiness를 vi, nano와 같은 파일 편집기를 이용하여 변경이 가능하다. 설정은 백분율(100%)로 설정되며, 기본적으로 60%로 설정되어 있다.

/etc/sysctl.conf

위 그림과 같이 sysctl.conf에 vm.swappiness를 0으로 할 경우 가상 메모리를 사용하지 않게 된다. 이는 물리 메모리만을 사용하겠다는 의미로 가상 메모리를 사용하지 않게된다.

가상 메모리의 크기를 설정하는 방법은 swap으로 파일이나 파티션을 등록하여 사용할 수 있다. 새로 파일을 생성하여, mkswap 명령을 통해 등록이 가능하다. 다만 기존의 사용중인 파티션을 사용할 경우 저장된 데이터가 사라지게 될 수 있으므로 설정에 주의를 기울이기 바란다. 여기서는 파일을 통해 생성하는 방법으로 진행해 보겠다.

sudo fallocate -l 1GB /var/swapfile

위 명령을 진행하며, /var 디렉토리에 swapfile이라는 1GB의 파일을 생성하게 된다. 그리고 해당 파일의 접근 권한을 시스템 접근으로 변경하도록 한다.

sudo chmod 600 /var/swapfile
swap 파일 생성

이제 mkswap 명령을 통해 swap으로 활용하도록 하자.

sudo mkswap /var/swapfile

이렇게 생성한 swapfile을 영구적으로 사용하고자 한다면, /etc/fstab에 추가해 줌으로써 가능하다.

/var/swapfile    none    swap    0    0
fstab

생성한 스왑의 사용을 해제 하고자 한다면, swapoff 명령으로 가능하다. 그리고 해당 파일을 삭제하고, /etc/fstab에도 등록을 하였다면 해당 줄을 지우도록 하자.

sudo swapoff /var/swapfile
sudo rm /var/swapfile

Windows 가상 메모리 확인

윈도우에서 가상 메모리를 확인하는 방법은 기본 작업 관리자로는 조금 어려움이 있다. 따라서 process explorer라는 도구를 이용하면 보다 쉽게 확인이 가능하다.

https://docs.microsoft.com/en-us/sysinternals/downloads/process-explorer

위 경로에서 다운로드후 View -> System Information(Ctrl+I)으로 이동하자. 그리고 메모리 탭으로 이동하면, Memory 정보를 확인 할 수 있다.

Process Explorer

메모리 탭에서 확인해보면 Commit Charge라고 보이는 부분이 바로 가상 메모리이다. 용어가 완전 다르게 표현되지만, 기본적으로 현재 가상메모리의 최대 크기와 사용량을 확인할 수 있다.

윈도우에서의 메모리를 관리하는데 있어 무조건 물리메모리를 사용해야 하는 공간이 존재한다. 하여 해당 영역을 NonPaged 라는 영역으로 표현한다.

윈도우는 메모리를 프로세스별 전체용량을 커밋 크기로 보여주고, 여기에 물리 메모리 사용량을 보여주게 된다. 그리고 개인 작업 집합(Private working set)이라는 이름으로 물리 메모리 사용을 확인 할 수 있다.

리눅스는 스왑과 물리 메모리를 분리하여 보여준다.

Windows 가상 메모리 설정

윈도우에서 가상 메모리를 설정하는 방법은 GUI를 통해서 가능하다.

제어판 –> 시스템으로 이동하면 고급 시스템 설정에서 확인할 수 있다.

고급 시스템 설정

고급 시스템 설정에 성능 부분을 통해 현재 설정된 가상메모리를 해제하거나 수동으로 관리할 수 있다.

설정

마치며

가상 메모리를 사용한다고 무조건 않좋다는 것은 아니다. 가상 메모리를 부족한 메모리를 대체하여 안정적으로 시스템을 운영할 수 있는 필수요소이며, 성능이 중요한(메모리 부분) 서비스라고 한다면, 사전에 성능 분석을 통해 설정을 조절하여 이용해야 한다.

Windows, Linux Memory Swap and Paging

Facebook Comments

Leave A Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.