Search

Swap 파일을 통해 메모리 부족 현상 해결

Status
UPLOADING
Date
2024/06/16
Tags
AWS

1. 개요

AWS EC2를 처음 학습하고 적용하던 시기에 항상 메모리가 뻗는(?) 현상이 있었습니다. 즉, 특정 시점에 CPU 활용률이 100%가 찍히기도 하면서 서버가 터졌습니다.
당시에는 미숙한 설정으로 인해 문제가 발생했다고 생각했지만, 프리티어 요금제를 사용하면서 적은 메모리를 사용하다보니 충분히 일어날 수 있는 일이었습니다.
오늘은 Swap 파일을 이용해서 부족한 메모리를 대체할 Swap 공간을 할당하는 작업을 진행해보도록 하겠습니다.

2. Swap 파일이란?

Swap 파일은 컴퓨터 시스템에서 메모리가 부족할 때 사용할 수 있는 가상 메모리입니다. Swap 파일은 디스크의 일부 공간을 이용하여 메모리의 역할을 수행하게 합니다. 이를 통해 RAM이 부족한 상황에서도 시스템의 안정성을 유지하고 메모리 부족으로 인한 프로그램 충돌을 방지할 수 있습니다.
현재 대부분의 운영체제는 RAM과 스왑 공간을 구성하고 있으며, 이를 통해 부족한 메모리 공간을 해결할 수 있습니다.
Swap 파일은 Page Swapping과 직접적인 연관이 있으며 해당 개념을 숙지하고 있다면 Swap 파일에 대한 이해를 더욱 더 쉽게 할 수 있습니다.

2-1. Page Swapping

운영 체제는 메모리를 작은 단위인 페이지로 관리합니다.
페이지는 일반적으로 4KB 크기입니다.
페이지 스와핑은 RAM이 부족할 때 사용되지 않는 페이지를 디스크의 스왑 파일로 옮기고, 필요한 페이지를 다시 RAM으로 가져오는 과정을 의미합니다.
이 과정은 운영 체제가 자동으로 처리하며, 사용자는 이를 직접 관리할 필요가 없습니다.

3. 실습하기

sudo dd if=/dev/zero of=/swapfile bs=128M count=16
Java
복사
dd 명령어를 사용하여 Swap 파일을 생성합니다. 이는 AWS 인스턴스를 생성했을 때 기본적으로 Swap 파일이 포함되어 있지 않을 수 있기 때문입니다.
if=/dev/zero: 입력 파일(input file)로 /dev/zero를 사용합니다. /dev/zero는 0으로 채워진 데이터를 생성하는 특수 파일입니다.
of=/swapfile: 출력 파일(output file)로 /swapfile을 지정합니다. 이 파일이 스왑 공간으로 사용될 것입니다.
bs=128M: 블록 크기(block size)를 128MB로 설정합니다.
count=16: 128MB 블록을 16개 생성하여 총 2GB의 스왑 파일을 만듭니다 (128MB * 16 = 2048MB = 2GB)
sudo chmod 600 /swapfile
Java
복사
swapfile의 권한을 변경합니다. 소유자만 읽기 및 쓰기 권한을 갖습니다
sudo mkswap /swapfile
Java
복사
swapfile을 스왑 공간으로 초기화 합니다.
sudo swapon /swapfile
Java
복사
swapfile을 활성화 합니다.
sudo vi /etc/fstab /swapfile swap swap defaults 0 0
Java
복사
시스템이 재부팅될 때 swapfile을 자동으로 마운트하도록 설정합니다.