본문 바로가기

# Development/DevOps

[Ubuntu] Swap 메모리 설정: AWS EC2 메모리 문제

ubuntu

Swap 메모리 설정: AWS EC2 메모리 문제

Out of Memory

AWS EC2 서버가 응답을 하지 않아서 콘솔에서 인스턴스 스크린샷을 확인해보니 Out of meory로 서버가 죽어있었다.

메모리가 모두 사용되어 프로세스가 중지 된 현상인데, 일단 인스턴스를 재부팅해서 손상되지 않은 상태로 복원했다. AWS에서는 해당 문제 발생 시, 메모리에 최적화된 인스턴스로의 변경을 권유하고 있다.

https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/TroubleshootingInstances.html#MemoryOOM

 

상태 확인에 실패한 인스턴스 문제 해결 - Amazon Elastic Compute Cloud

일부 시스템에서는 SELINUX=disabled 파일에서 /mount_point/etc/sysconfig/selinux로 설정함으로써 SELinux를 비활성화합니다. 이 파일에서 mount_point는 복구 인스턴스에서 볼륨을 마운트한 위치입니다.

docs.aws.amazon.com

 

 

얼마전에 인스턴스를 업그레이드했기 때문에 메모리 부족이 언제, 무엇 때문에 발생하는지 확인이 필요하다고 생각했고, 그 사이에 서버가 또 메모리부족으로 멈추는 일을 방지하기 위해 리눅스 서버에 Swap 메모리를 할당해주었다.


Swap 메모리란?

Swap 메모리는 실제 메모리 RAM이 가득 찼지만 더 많은 메모리가 필요할때 디스크 공간을 이용하여 부족한 메모리를 대체하는 공간이다. RAM이 부족하다면 중간에 프로세스가 강제로 종료되거나 처리가 굉장히 느려질 수 있는데, 이런 경우에 Swap 메모리를 활용하면 RAM이 부족한 상황을 큰 비용을 들이지 않고 대처할 수 있다. 디스크의 공간을 메모리 처럼 사용하는 가상 메모리의 개념으로, 속도는 기존의 메모리에 비해 현저히 떨어진다.

** 컴퓨터 메모리(RAM)
시스템의 단기 데이터 스토리지로, 정보에 빠르게 액세스할 수 있도록 컴퓨터가 실시간으로 사용하는 정보를 저장한다.


Swap 메모리 확인하기

리눅스에서 free -h 명령어를 사용하면 현재 서버의 메모리와 Swap 메모리 정보를 확인할 수 있다.


Swap 메모리 설정하기

1. swapfile 메모리 할당

$ sudo dd if=/dev/zero of=/swapfile bs=128M count=32
  • dd: 파일 복사 및 변환 관련 유닉스 명령 유틸리티
  • /dev/zero: 데이터 스토리지 초기화 관련 파일
  • bs=128M count=32 으로 총 128 * 32 = 4GB로 swapfile 크기 설정

2. swapfile 접근 권한 설정

$ sudo chmod 600 /swapfile
  • chmod 600: 읽기, 쓰기 가능

3. swapfile 추가할 swap 공간 생성

$ sudo mkswap /swapfile

# mkswap -> make swap!

4. swapfile을 swap memory에 추가

$ sudo swapon /swapfile

5. 부팅시 swapfile 활성화 설정 추가

# /etc/fstab 열기
sudo nano /etc/fstab

# 파일의 마지막 줄에 아래 명령어 추가
/swapfile swap swap defaults 0 0

Swap 메모리 제거하기

1. 할당된 스왑 공간을 제거한다.

$ sodu swapoff /swapfile

2. swapfile을 제거한다.

$ sudo rm -rf /swapfile

3. 부팅시 swapfile 활성화 설정을 제거한다.

$ sudo nano /etc/fstab


# 아래의 설정 삭제
/swapfile swap swap defaults 0 0

 

<참고>