Haru Utils

운영체제 · 구성 레시피

Linux swap 파일과 swappiness 구성

메모리 압력과 파일시스템 제약을 먼저 확인하고 기존 파일을 덮어쓰지 않는 swap 파일을 만든 뒤, fstab 검증·재부팅 지속성·안전한 swapoff 롤백까지 점검합니다.
swap 파일 생성swappiness 설정Linux 메모리 부족fstab swapBtrfs swapfile
지원 환경Ubuntu 24.04·Rocky Linux 9의 ext4 또는 XFS 루트 파일시스템
예상 시간35
난이도중급
검토일2026-08-28

BEFORE YOU START

시작 전에 준비하세요

01

현재 메모리·swap 사용 추세와 OOM 로그, 워크로드 지연 허용 범위

02

swap 크기만큼의 실제 디스크 여유와 파일시스템 종류·CoW 여부

03

sudo 권한, /etc/fstab·sysctl 설정 백업, 유지보수 재부팅 계획

04

메모리 부족 때 서비스를 축소하거나 용량을 증설할 별도 복구 절차

권장 대상 메모리 급증 시 즉시 OOM으로 종료되는 위험을 완화하되 swap을 RAM 대체재로 오해하지 않으려는 서버 운영자

FOLLOW THE RECIPE

8단계 구성·점검 레시피

1
확인시스템을 변경하지 않는 점검 단계

메모리 압력과 파일시스템 확인

swap 크기나 swappiness를 고정 공식으로 정하지 않습니다. 실제 메모리 압력, 저장장치 지연, 파일시스템 특성을 먼저 확인합니다.

운영체제와 커널
cat /etc/os-release
uname -sr
메모리와 swap
free -h
swapon --show --bytes
루트 파일시스템
findmnt -no SOURCE,FSTYPE,OPTIONS /
df -hT /
현재 swappiness
sysctl vm.swappiness
  • OOM 원인이 누수·과도한 worker가 아닌지 먼저 조사했다.
  • swap 크기만큼 할당해도 운영 여유 공간이 남는다.
  • 파일시스템이 ext4·XFS인지 Btrfs인지 구분했다.
결과 읽기

swap은 메모리 부족의 완충 장치이며 지속적인 page-in/out을 해결하지 않습니다. 메모리 누수나 용량 부족은 별도로 수정합니다.

다음 판단

기존 swap·fstab·동일 파일과 파일시스템 제약을 확인합니다.

2
확인시스템을 변경하지 않는 점검 단계

기존 swap과 충돌·여유량 점검

기존 /swapfile을 덮어쓰지 않습니다. 활성 swap, fstab 중복, 파일 존재, Btrfs 다중 장치·snapshot 제약을 먼저 확인합니다.

활성 swap
swapon --show --output=NAME,TYPE,SIZE,USED,PRIO
fstab swap 항목
grep -n -E '[[:space:]]swap[[:space:]]' /etc/fstab
대상 파일 존재 여부
sudo test ! -e /swapfile
종료 코드 0일 때만 신규 생성할 수 있습니다. 파일이 있으면 소유·용도를 조사하고 중단합니다.
최근 메모리 압력
sudo journalctl -k --since '-7 days' | grep -Ei 'out of memory|oom-kill|memory cgroup'
Btrfs인 경우 구조
sudo btrfs filesystem usage /
루트 파일시스템이 Btrfs일 때만 사용합니다. 다중 장치나 지원하지 않는 data profile이면 이 레시피에서 생성하지 않습니다.
  • /swapfile이 존재하지 않고 fstab에 중복 항목이 없다.
  • 현재 swap 우선순위와 사용량을 기록했다.
  • 서비스를 중단하지 않고 swapoff할 수 있는 메모리 여유 기준을 정했다.
결과 읽기

기존 swap이 충분하지만 OOM이 발생했다면 cgroup 제한·메모리 누수·overcommit을 먼저 확인합니다.

다음 판단

배포판 util-linux와 파일시스템 전용 도구를 확인합니다.

3
변경패키지·설정·서비스 상태가 달라지는 단계

swap 관리 도구 확인

mkswap·swapon·fallocate가 포함된 배포판 util-linux를 사용합니다. Btrfs 분기는 배포판 btrfs-progs가 공식 mkswapfile을 제공할 때만 선택합니다.

변경 단계입니다. 대상 서버, 백업 파일, 서비스 중단 영향과 바로 이전 상태로 돌아가는 방법을 다시 확인하세요.
필수 실행 파일
command -v fallocate
command -v mkswap
command -v swapon
command -v findmnt
Ubuntu util-linux 변경 미리 보기
apt-get --simulate install util-linux
Ubuntu util-linux 설치
sudo apt-get install util-linux
Rocky util-linux 후보
sudo dnf info util-linux
Rocky util-linux 설치
sudo dnf install util-linux
안전한 단일 명령 생성 지원 확인
mkswap --help | grep -- '--file'
btrfs filesystem mkswapfile --help
각 기능이 실제로 제공되는 환경에서만 해당 대안 분기를 사용합니다.
  • 현재 배포판에 맞는 설치 분기만 사용했다.
  • util-linux 버전과 지원 옵션을 확인했다.
  • Btrfs가 아니라면 btrfs 명령을 설치하거나 실행하지 않는다.
결과 읽기

필요 옵션이 없으면 임의 다운로드 도구를 사용하지 말고 배포판·파일시스템 공식 절차를 선택합니다.

다음 판단

파일시스템에 맞는 한 생성 분기만 선택하고 설정을 백업합니다.

4
주의권한·연결·중단 영향을 확인할 단계

swap 파일 생성과 지속 설정 준비

ext4·XFS fallocate, 지원되는 mkswap --file, Btrfs mkswapfile 중 정확히 한 분기만 사용합니다. 블록 장치나 파티션을 초기화하는 명령은 제공하지 않습니다.

백업 접미사
date -u +%Y%m%dT%H%M%SZ
fstab 백업
sudo cp --preserve=all --no-clobber /etc/fstab /etc/fstab.<BACKUP_SUFFIX>.bak
기존 swappiness 파일 백업
sudo cp --preserve=all --no-clobber /etc/sysctl.d/60-swappiness.conf /etc/sysctl.d/60-swappiness.conf.<BACKUP_SUFFIX>.bak
기존 파일이 있을 때만 실행합니다.
ext4·XFS 기본 생성 분기
sudo test ! -e /swapfile && sudo fallocate --length <SWAP_SIZE_GIB>GiB /swapfile
ext4 또는 XFS에서만 사용합니다. 실패하거나 이후 swapon이 holes를 경고하면 반복 실행하지 말고 파일을 .failed로 보존한 뒤 지원되는 대안 분기를 검토합니다.
지원되는 util-linux 대안 분기
sudo test ! -e /swapfile && sudo mkswap --file --size <SWAP_SIZE_GIB>GiB /swapfile
mkswap --help에 --file·--size가 실제로 표시되고 기본 분기를 사용하지 않은 경우에만 사용합니다. 이 명령은 생성과 swap 서명 작성을 함께 수행하므로 아래 별도 mkswap을 중복 실행하지 않습니다.
Btrfs 공식 대안 분기
sudo test ! -e /swapfile && sudo btrfs filesystem mkswapfile --size <SWAP_SIZE_GIB>GiB /swapfile
단일 장치·지원 data profile·지원 btrfs-progs인 Btrfs에서만 사용합니다. 활성 swapfile이 있는 subvolume은 snapshot할 수 없습니다.
파일 권한 제한
sudo chown root:root /swapfile
sudo chmod 0600 /swapfile
기본 분기의 swap 서명 생성
sudo mkswap /swapfile
fallocate 기본 분기에서만 실행합니다. 대상이 정확히 /swapfile 일반 파일인지 stat으로 다시 확인합니다.
fstab 편집
sudoedit /etc/fstab
swappiness drop-in 편집
sudoedit /etc/sysctl.d/60-swappiness.conf
설정 예시 · /etc/fstab
부팅 시 swap 파일 활성화
/swapfile none swap defaults 0 0
동일한 항목이 없는지 확인하고 한 줄만 추가합니다. 전체 fstab을 예시로 교체하지 않습니다.
설정 예시 · /etc/sysctl.d/60-swappiness.conf
워크로드 측정 기반 swappiness
vm.swappiness=<SWAPPINESS>
커널 허용 범위는 0~200이며 기본값은 일반적으로 60입니다. 0을 swap 금지로 오해하지 말고 저장장치와 워크로드를 측정해 결정합니다.
  • 세 생성 분기 중 파일시스템에 맞는 하나만 사용했다.
  • 대상은 블록 장치가 아니라 정확한 /swapfile 일반 파일이다.
  • /swapfile은 root:root 0600이다.
  • fstab에는 동일한 swap 행이 한 개만 있다.
  • swappiness 값의 측정 근거와 이전 값을 기록했다.
결과 읽기

swapon이 holes 또는 CoW 오류를 반환하면 우회 옵션을 찾지 말고 파일시스템 공식 생성 명령과 제약을 다시 확인합니다.

다음 판단

fstab을 검증한 뒤 swap과 swappiness를 단계적으로 활성화합니다.

5
주의권한·연결·중단 영향을 확인할 단계

fstab 검증 후 swap 활성화

fstab 검증이 실패하면 swapon을 실행하지 않습니다. swap 파일만 먼저 활성화하고 확인한 뒤 swappiness drop-in을 적용합니다.

대상 파일 최종 확인
sudo stat -c '%F %U:%G %a %s %n' /swapfile
sudo file /swapfile
fstab 검증 후 활성화
sudo findmnt --verify --verbose && sudo swapon /swapfile
swap 상태
swapon --show --output=NAME,TYPE,SIZE,USED,PRIO
free -h
swappiness 적용
sudo sysctl -p /etc/sysctl.d/60-swappiness.conf
커널 값 확인
sysctl vm.swappiness
  • findmnt 검증 성공 뒤에만 swapon했다.
  • 활성 swap 이름·크기가 계획과 일치한다.
  • swappiness가 승인한 값으로 반영됐다.
  • 애플리케이션 지연과 디스크 I/O를 관찰하기 시작했다.
결과 읽기

swap이 활성화돼도 즉시 사용량이 생기지 않는 것은 정상입니다. 강제로 메모리 압력을 만들지 않습니다.

다음 판단

재부팅 지속성과 실제 압력 지표를 안전하게 검증합니다.

6
확인시스템을 변경하지 않는 점검 단계

재부팅 지속성과 메모리 지표 검증

부하를 인위적으로 만들어 OOM을 유발하지 않습니다. 정상 트래픽에서 swap-in/out, I/O 지연, 서비스 응답을 관찰합니다.

현재 swap과 메모리
swapon --show --output=NAME,TYPE,SIZE,USED,PRIO
free -h
페이지 교환 추세
vmstat 1 5
fstab 유효성
sudo findmnt --verify --verbose
grep -n -F '/swapfile none swap defaults 0 0' /etc/fstab
부팅 후 확인
swapon --show
sysctl vm.swappiness
systemctl --failed --no-pager
승인된 유지보수 재부팅 뒤 실행합니다. 이 레시피에서 자동 재부팅하지 않습니다.
  • 재부팅 후 /swapfile이 한 번만 활성화된다.
  • swappiness 값이 유지된다.
  • 지속적인 si·so와 높은 I/O wait가 발생하지 않는다.
  • 애플리케이션 응답 지연이 허용 범위다.
결과 읽기

지속적인 swap 활동은 RAM 부족 또는 워크로드 문제의 신호입니다. swappiness만 반복 조정하지 말고 메모리 용량·프로세스를 확인합니다.

다음 판단

권한·dump 민감정보·Btrfs snapshot 제약과 OOM 정책을 점검합니다.

7
주의권한·연결·중단 영향을 확인할 단계

권한과 데이터 노출 위험 점검

swap에는 메모리에 있던 민감정보가 기록될 수 있습니다. 서버 위협 모델에 따라 전체 디스크 암호화·암호화 swap을 별도 설계합니다.

swap 파일 권한
sudo stat -c '%F %U:%G %a %n' /swapfile
설정 파일 권한
sudo stat -c '%U:%G %a %n' /etc/fstab /etc/sysctl.d/60-swappiness.conf
최근 OOM과 I/O 경고
sudo journalctl -k --since '-24 hours' | grep -Ei 'oom|out of memory|I/O error|swap'
활성 swap 확인
swapon --show --bytes
  • /swapfile은 root:root 0600이다.
  • 백업·스냅샷에 swap 파일을 불필요하게 포함하지 않는다.
  • 민감 워크로드는 저장장치 암호화 요구사항을 별도로 검토했다.
  • Btrfs subvolume snapshot 제한을 운영 문서에 반영했다.
  • swap을 OOM·메모리 누수의 유일한 해결책으로 사용하지 않는다.
결과 읽기

암호화 요구가 있다면 이 일반 swap 파일을 확대하지 말고 부팅·키 관리까지 포함한 별도 설계를 사용합니다.

다음 판단

롤백은 충분한 RAM을 확인한 뒤 정확한 swap 파일만 비활성화합니다.

8
주의권한·연결·중단 영향을 확인할 단계

메모리 확인 후 안전하게 swap 원복

swapoff는 사용 중인 페이지를 RAM으로 되돌리므로 여유 메모리가 부족하면 실패하거나 서비스에 영향을 줄 수 있습니다. 먼저 사용량을 낮추고 유지보수 시간에 진행합니다.

swapoff 가능성 판단
free -h
swapon --show --output=NAME,SIZE,USED,PRIO
vmstat 1 5
대상 swap만 비활성화
sudo swapoff /swapfile
가용 RAM이 /swapfile의 실제 USED와 서비스 여유분보다 충분하고 유지보수 승인을 받은 경우에만 실행합니다. 실패하면 반복하지 말고 메모리 사용을 먼저 낮춥니다.
fstab에서 정확한 한 줄 제거
sudoedit /etc/fstab
/swapfile none swap defaults 0 0 한 줄만 제거합니다. 다른 마운트 항목은 변경하지 않습니다.
fstab 재검증
sudo findmnt --verify --verbose
신규 swappiness 파일 비활성화
sudo mv /etc/sysctl.d/60-swappiness.conf /etc/sysctl.d/60-swappiness.conf.disabled.<ROLLBACK_SUFFIX>
기존 swappiness 백업 복원·적용
sudo cp --preserve=all /etc/sysctl.d/60-swappiness.conf.<BACKUP_SUFFIX>.bak /etc/sysctl.d/60-swappiness.conf && sudo sysctl -p /etc/sysctl.d/60-swappiness.conf
작업 전 실제 백업이 있었던 경우에만 실행합니다.
이전 런타임 값 복원 분기
sudo sysctl -w vm.swappiness=<PREVIOUS_SWAPPINESS>
기존 drop-in이 없었던 경우 기록한 이전 값을 복원합니다.
비활성 swap 파일 보존
sudo mv /swapfile /swapfile.disabled.<ROLLBACK_SUFFIX>
sudo chmod 0600 /swapfile.disabled.<ROLLBACK_SUFFIX>
swapoff 성공과 fstab 항목 제거·검증을 확인한 뒤에만 실행합니다. 즉시 삭제하지 않습니다.
최종 상태
swapon --show
free -h
sysctl vm.swappiness
  • 충분한 가용 RAM과 유지보수 시간을 확인한 뒤 swapoff했다.
  • 다른 swap을 끄지 않고 정확한 /swapfile만 대상으로 했다.
  • fstab 한 줄만 제거하고 전체 검증을 통과했다.
  • 파일은 삭제하지 않고 0600 상태로 비활성화 보존했다.
  • 이전 swappiness와 서비스 상태를 복원했다.
결과 읽기

swapoff가 메모리 부족으로 실패하면 fstab이나 파일을 먼저 건드리지 말고 서비스 축소·RAM 증설·점진적 사용량 감소를 계획합니다.

다음 판단

원인을 파일시스템 제약·메모리 용량·워크로드·I/O 성능으로 분리합니다.

SECURITY CHECK

운영 전 마지막 보안 점검

  • 기존 /swapfile을 덮어쓰지 않고 블록 장치 명령을 사용하지 않는다.
  • 파일시스템에 맞는 한 생성 분기만 사용한다.
  • /swapfile은 root:root 0600이고 fstab을 활성화 전에 검증한다.
  • swappiness는 0~200 범위에서 실제 I/O 비용과 워크로드로 결정한다.
  • swapoff 전에 실제 사용량보다 충분한 RAM을 확보한다.
  • swap의 민감정보 저장 위험과 암호화 요구를 별도 검토한다.

COMMON ERRORS

자주 막히는 지점

swapon이 holes 또는 Invalid argument를 반환

증상
mkswap은 성공했지만 swap 활성화가 거부됩니다.
가능한 원인
sparse 파일, CoW Btrfs, 지원하지 않는 preallocation 또는 다중 장치 제약일 수 있습니다.
확인 순서
반복 활성화하지 말고 파일을 비활성 보존한 뒤 util-linux --file 또는 Btrfs 공식 mkswapfile 지원 여부를 확인합니다.
트러블슈팅으로 이어보기

swapoff가 Cannot allocate memory로 실패

증상
대상 swap이 계속 active이고 swapoff 종료 코드가 실패합니다.
가능한 원인
swap의 사용 페이지를 수용할 RAM 여유가 부족합니다.
확인 순서
fstab·파일을 변경하지 말고 메모리 사용을 줄이거나 RAM을 증설한 유지보수 시간에 다시 시도합니다.
트러블슈팅으로 이어보기

swap 추가 후 서버 지연이 커짐

증상
vmstat의 si·so와 I/O wait가 지속적으로 높습니다.
가능한 원인
RAM 부족, 과도한 swappiness 또는 느린 저장장치에 지속적으로 paging하고 있습니다.
확인 순서
프로세스별 메모리·cgroup 제한·누수를 확인하고 RAM 또는 워크로드를 조정합니다.
트러블슈팅으로 이어보기

PRIMARY REFERENCES

공식 문서

설치 저장소와 지원 버전은 바뀔 수 있습니다. 검토일 이후에는 링크된 공식 문서와 현재 서버의 패키지 후보 버전을 함께 확인하세요.

도구 빠른 검색

최근 사용한 도구를 다시 열거나, 이름과 기능으로 검색하세요.

검색어와 도구의 입력·결과는 저장하지 않습니다.

↑↓ 이동 · Enter 열기 · Esc 닫기