Ⅰ. 리눅스 가상 메모리 기술이란?
리눅스 커널은 시스템의 물리적 한계를 넘어서기 위해 하드 디스크의 특정 파티션이나 파일을 물리 메모리(RAM)의 연장선으로 사용하는 스왑(Swap) 기술을 포함한 가상 메모리 시스템을 운영합니다.
ⅰ. 개념 및 정의
- 모든 프로세스는 독립적이고 거대한 가상 주소 공간(Virtual Address Space)을 할당받으며, 커널이 이를 실제 물리 메모리(RAM)와 스왑 공간으로 맵핑하여 관리합니다.
- 물리적 RAM 용량이 가득 찼을 때, 우선순위가 낮거나 오랫동안 사용되지 않은 메모리 페이지(Page)를 하드 디스크의 스왑 영역으로 이동시켜 여유 공간을 확보합니다.
Ⅱ. 리눅스 가상 메모리 기술 특징
리눅스는 서버 환경에 맞게 매우 세밀하고 유연한 커널 파라미터를 제공하여 관리자가 가상 메모리 정책을 직접 통제할 수 있게 합니다.
ⅰ. 파티션과 파일 방식의 동시 지원
- Swap Partition: 디스크의 독립된 파티션을 통째로 스왑 전용으로 사용하는 방식으로, 파일 시스템의 오버헤드가 없어 전통적으로 가장 높은 성능을 냅니다.
- Swap File: 윈도우의 pagefile.sys처럼 기존 파일 시스템 내에 파일을 생성하여 스왑 공간으로 사용하는 방식으로, 용량 확장이 매우 유연합니다. 최신 리눅스 커널에서는 파티션 방식과 성능 차이가 거의 없습니다.
ⅱ. 유연한 커널 제어 (Swappiness)
- 리눅스 커널은 RAM이 완전히 가득 차지 않더라도 미리 선제적으로 스왑을 사용할지 결정할 수 있는 vm.swappiness라는 커널 파라미터를 제공합니다.
- 이 값을 조절하여 디스크 I/O를 최소화하거나 반대로 RAM의 여유 캐시 공간을 넓히는 등 목적에 맞게 최적화가 가능합니다.
Ⅲ. 리눅스 가상 메모리 기술 동작방식
리눅스의 가상 메모리는 커널 백그라운드 프로세스에 의해 유기적으로 모니터링되며, 극한의 상황에서는 시스템을 보호하기 위한 극단적인 조치도 수행합니다.
ⅰ. kswapd (커널 스왑 데몬) 동작
- kswapd는 백그라운드에서 지속적으로 시스템의 사용 가능한 메모리 양을 모니터링합니다.
- 메모리 여유분이 커널에 설정된 특정 워터마크(low) 아래로 떨어지면 활성화되어, 잘 사용되지 않는 페이지를 스왑 영역으로 쫓아내고(Page Out) 가용 메모리를 확보합니다.
ⅱ. OOM (Out Of Memory) Killer 메커니즘
- 물리적 RAM과 스왑 공간이 모두 가득 차서 더 이상 메모리를 할당할 수 없는 극한의 상태가 되면, 커널은 시스템 전체의 패닉(Kernel Panic)을 막기 위해 OOM Killer를 호출합니다.
- OOM Killer는 내부적인 'Badness Score' 알고리즘을 계산하여, 메모리를 가장 많이 점유하고 있으면서 희생해도 시스템 핵심 구동에 영향이 적은 프로세스를 강제로 종료(Kill)시켜 메모리를 회수합니다.
Ⅳ. 리눅스 가상 메모리 기술 구성 및 흐름도
리눅스의 가상 메모리는 MMU를 통한 주소 변환과 커널 데몬들의 상호 작용으로 구성됩니다.

Ⅴ. 리눅스 가상 메모리 기술 설치 방법
리눅스에서는 OS 설치 단계에서 스왑 파티션을 구성하거나, 운영 중에 스왑 파일을 생성하여 동적으로 가상 메모리를 추가할 수 있습니다.
ⅰ. Swap 파일(File) 생성 방식
- dd 명령어를 사용하여 루트 디렉토리에 원하는 크기(예: 2GB)의 빈 파일을 생성합니다.
[feccle@localhost] # sudo dd if=/dev/zero of=/swapfile bs=1M count=2048
2. 보안을 위해 파일의 권한을 루트만 접근할 수 있도록 600으로 제한합니다.
[feccle@localhost] # sudo chmod 600 /swapfile
ⅱ. 파일 포맷 지정
- 생성된 더미 파일을 리눅스가 스왑 영역으로 인식할 수 있도록 mkswap 명령어로 포맷을 수행합니다.
[feccle@localhost] # sudo mkswap /swapfile
Ⅵ. 리눅스 가상 메모리 기술 사용 방법
생성된 스왑 영역을 시스템에 활성화하고, 커널의 메모리 관리 성향(Swappiness)을 튜닝하는 방법입니다.
ⅰ. Swap 활성화 및 영구 등록
- swapon 명령어를 사용하여 포맷된 스왑 영역을 즉시 시스템에 활성화합니다.
[feccle@localhost] # sudo swapon /swapfile
2. 시스템 재부팅 후에도 스왑이 유지되도록 /etc/fstab 파일을 편집하여 /swapfile swap swap defaults 0 0 구문을 추가합니다.
[feccle@localhost] # sudo vi /etc/fstab
----------------------------------------------------------------------------------------------
# /etc/fstab
# Created by anaconda on Sun Sep 8 12:56:48 2024
#
# Accessible filesystems, by reference, are maintained under '/dev/disk/'.
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
#
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
#
/dev/mapper/rl-root / ext4 defaults 1 1
UUID=acfe2a75-954a-4cc4-864d-607216c3df2e /boot ext4 defaults 1 2
/dev/mapper/rl-swap none swap defaults 0 0
UUID=e7401f8d-06f7-4746-8874-8f45341a368b /data ext4 defaults 0 2
/swapfile swap swap defaults 0 0
ⅱ. Swappiness 값 튜닝
- vm.swappiness의 기본값은 보통 60입니다. 임시로 값을 변경하려면 sysctl 명령어를 사용합니다.
[feccle@localhost] # sudo sysctl vm.swappiness=10
2. 재부팅 후에도 값을 영구적으로 적용하려면 /etc/sysctl.conf 파일의 하단에 vm.swappiness=10을 추가하고 저장합니다.
[feccle@localhost] # sudo vi /etc/sysctl.conf
-----------------------------------------------------------------------------------
# sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.
#
# For more information, see sysctl.conf(5) and sysctl.d(5).
vm.swappiness=10
Ⅶ. 리눅스 가상 메모리 기술 자주 쓰는 명령어
리눅스 터미널에서 메모리 사용량과 스왑 영역의 상태를 파악하는 필수 명령어들입니다.
ⅰ. 메모리 상태 확인
- free -h : 전체 물리 메모리와 스왑 메모리의 할당량, 사용량, 남은 용량 등을 사람이 읽기 편한 단위(MB, GB)로 출력합니다.
- swapon --show : 현재 시스템에 등록되어 활성화된 스왑 디바이스(파티션 또는 파일)의 경로, 타입, 크기 및 우선순위를 보여줍니다.
ⅱ. 프로세스 및 커널 로그 확인
- top 또는 htop : 실시간으로 메모리를 가장 많이 점유하고 있는 프로세스를 확인하고, 스왑 영역의 사용량을 상단 인터페이스에서 모니터링합니다.
- dmesg -T | grep -i oom : 시스템 로그를 검색하여 최근 메모리 부족으로 인해 OOM Killer가 작동하여 프로세스를 죽인 기록이 있는지 확인합니다.
Ⅷ. 리눅스 가상 메모리 기술 활용방안
리눅스 환경의 특성상 다양한 엔터프라이즈 환경에서 메모리 관리 전략이 다르게 적용됩니다.
ⅰ. 대용량 데이터베이스 서버 (RDBMS)
- MySQL이나 Oracle 같은 데이터베이스는 자체적인 메모리 캐싱 기능을 보유하고 있으므로 스왑 공간으로 페이지가 밀려나면(Swap-out) 극심한 성능 저하가 발생합니다.
- 이 경우 swappiness 값을 1이나 10 정도로 매우 낮게 설정하여, 시스템이 극한의 메모리 부족에 시달리지 않는 이상 웬만하면 스왑을 사용하지 않도록 강제하는 전략을 취합니다.
ⅱ. 쿠버네티스(Kubernetes) 등 컨테이너 환경
- 기본적으로 쿠버네티스 노드(Node)는 컨테이너 간의 자원 격리와 정확한 메모리 제한(Limit) 계산을 위해 노드의 스왑 기능을 아예 끄도록(Disable) 강제해 왔습니다.
- 최근(v1.22+)부터는 노드 수준의 안정성을 높이기 위해 제한적으로 스왑을 지원하는 기능(SwapMemoryManagement)이 도입되고 있어, 용도에 맞게 OOM을 방지하는 완충재로 활용되고 있습니다.
Ⅸ. 리눅스 가상 메모리 기술 트러블 슈팅
ⅰ. 빈번한 OOM (Out Of Memory) Killer 발생
- 증상: 데몬이나 프로세스(주로 DB나 웹서버)가 특별한 에러 로그 없이 갑자기 종료됩니다.
- 해결: dmesg로 OOM 기록을 확인하고, 스왑 파일의 크기를 늘려 시스템의 절대적인 메모리 풀을 넓혀주어야 합니다. 장기적으로는 서버의 물리 RAM을 증설하는 것이 바람직합니다.
ⅱ. 스래싱(Thrashing)으로 인한 Load Average 급증
- 증상: top 명령어에서 CPU 사용량은 높지 않은데 wa (I/O Wait) 수치가 비정상적으로 치솟고 시스템 응답이 마비됩니다.
- 해결: 메모리가 부족하여 RAM과 디스크 간의 페이지 교체 작업(Swapping)에 시스템 자원을 모두 소모하고 있는 상태입니다. 메모리 누수가 있는 프로세스를 찾아 종료하거나, 당장 swappiness 값을 낮춰 디스크 I/O의 빈도를 조절해야 합니다..
Ⅹ. 윈도우 vs 리눅스 가상 메모리 비교
| 비교 항목 | 윈도우(Windows) 가상 메모리 | 리눅스(Linux) 가상 메모리 |
| 기본 구현 방식 | 파일 기반 (pagefile.sys) | 파티션 기반 (Swap Partition) 및 파일 기반 (swapfile) 혼용 |
| 주요 저장 위치 | 시스템 드라이브 (주로 C:\) 루트에 숨김 파일 형태로 존재 | 별도의 독립된 블록 파티션 또는 루트 디렉토리 내 파일로 존재 |
| 관리 철학 | 메모리 관리자가 주도. 사용자 개입을 최소화하고 동적 할당을 통한 자동화 우선 | 서버 관리자에게 세밀한 커널 통제권 부여. 목적에 맞는 수동 최적화 중심 |
| 핵심 제어/튜닝 요소 | 처음 크기(Initial) 및 최대 크기(Maximum) 고정 (단편화 방지 목적) | vm.swappiness (0~100 값으로 RAM과 디스크 스왑의 사용 비율 및 적극성 제어) |
| 메모리 고갈 (OOM) 대응 | 페이징 파일 자동 확장 시도 -> 한계 도달 시 심각한 지연(스래싱) 및 프로그램 에러 창 발생 | 커널 데몬(kswapd) 작동 -> 한계 도달 시 OOM Killer가 발동하여 특정 프로세스 강제 종료 |
| 생성 및 설정 방법 | GUI 기반: [시스템 속성] ➔ [고급] ➔ [성능 설정] ➔ [가상 메모리] | CLI 기반: dd 파일 생성 ➔ mkswap 포맷 ➔ /etc/fstab 등록 |
| 모니터링 명령어 | systeminfo, wmic pagefilesetting, (PowerShell) Get-CimInstance | free -h, swapon --show, top, vmstat |
| 주요 활용 및 목적 | 멀티태스킹 고부하 완충, 시스템 크래시 시 오류 덤프(MEMORY.DMP) 기록 공간 확보 | 대용량 DB/웹 서버의 급작스러운 트래픽 폭주 방어, 하이버네이션(최대 절전) 데이터 백업 |
| 대표적인 트러블 슈팅 | C드라이브 용량 확보, 가상 메모리 크기 수동 고정을 통한 디스크 단편화 방지 | OOM Killer 로그 확인(dmesg), 메모리 누수 점검, Swappiness 수치 하향 조정 |
'시스템(Linux)' 카테고리의 다른 글
| 오픈소스 가상화와 프라이빗 클라우드 인프라, Proxmox VE (0) | 2026.06.04 |
|---|---|
| 직관적이고 강력한 프로세스 모니터링 도구인 htop 에 대해 알아보겠습니다. (0) | 2026.04.22 |
| 리눅스 커널의 한계를 넘을 수 있는 eBPF(extended Berkeley Packet Filter) 에 대해 알아보겠습니다. (0) | 2026.04.07 |
| /run/user/1000 알람에 대해 알아보겠습니다. (1) | 2026.03.11 |
| Linux kill vs pkill 정리 (0) | 2026.03.10 |