'AWS로 구현하는 MAS와 컨테이너 오캐스트레이션' 강의를
블로그를 통해 구매하시는 분들에게만 10%할인 중입니다.
이미지를 클릭하면 강의로 이동할 수 있습니다.
아래 쿠폰번호를 입력해 주세요!
16861-259843d6c2d7
가상 메모리
- 물리적 메모리(RAM) 보다 큰 메모리 공간을 프로세스에 제공하는 기술
- 더 큰 메모리 공간이 필요한 프로세스도 실행할 수 있게 해준다.
- 가상 메모리는 물리적 메모리와 하드 디스크 또는 SSD의 일부를 함께 사용하여 구성
- 페이지(page) 라는 고정 크기의 단위로 나누어 관리된다.
작동 원리
- 프로세스가 실행될 때 필요한 메모리 페이지는 물리적 메모리에 로드된다.
- 메모리가 부족하거나 사용도지 않는 페이지가 있을 경우 이 페이지들은 하드 디스크 또는 SSD의 가상 메모리로 이동
- 해당 페이지가 다시 필요할 경우, 해당 페이지는 가상 메모리에서 물리적 메모리로 다시 로드된다.
필요성
- 물리적 메모리보다 큰 메모리 공간을 프로세스가 사용할 수 있다.
- 메모리를 효율적으로 관리하여 시스템 성능 향상
swap 메모리
- 가상 메모리를 구현하는 방법 중 하나
- 물리적 메모리(RAM)가 부족할 때 시스템에 사용될 메모리를 추가적으로 자원을 할당하기 위해 사용된다.
- 일반적으로 하드 드라이브나 SSD를 사용하며 RAM 보다는 속도가 느리다.
작동 원리
- 물리적 메모리가 부족할 경우 사용되지 않는 페이지를 swap 메모리로 이동시킨다.
- 해당 페이지가 다시 필요할 경우, swap 메모리에서 물리적 메모리로 페이지를 로드한다.
필요성
- 메모리 부족 상황에서 시스템 성능을 유지하고 프로세스 실행을 지원
- 비활성화된 프로세스의 메모리를 임시로 저장하여 물리적 메모리를 효율적으로 사용
가상 메모리와 swap 메모리를 메모리 관리를 향상시키고, 메모리 부족 문제를 완화하는 데 도움이 되는 기술이다.
이러한 메모리 관리 기법들은 시스템의 전반적인 성능과 안정성에 영향을 미친다.
가상 메모리와 swap 메모리의 차이점
- 구현 위치
가상 메모리는 운영 체제 수준에서 구현되며, 프로세스간의 메모리 분리와 페이지 교체를 관리
swap 메모리는 하드 디스크 또는 SSD에 할당된 영역으로 물리적 메모리에서 비활성화된 페이지를 저장하는데 사용 - 사용 목적
가상 메모리는 프로세스에 더 큰 메모리 공간을 제공하고 메모리 사용량을 최적화하는 데 중점을 둔다.
swap 메모리는 메모리 부족 시 비활성화된 페이지를 저장하여 시스템의 안정성을 유지하는 데 주로 사용된다.
두 기술은 함께 사용되어 시스템의 메모리 관리를 최적화한다. 가상 메모리를 사용하면 프로세스는 필요한 메모리를 얻을 수 있으며, swap 메모리는 물리적 메모리가 부족한 경우 메모리 사용량을 조절하고 시스템의 전체 성능과 안정성을 유지하는 데 도움을 준다.
swap 메모리 사용방법 (리눅스 우분투 기준)
1. swap 파일 생성
sudo fallocate -l 2G /swapfile
위 명령어를 통해 2G의 swap 파일을 생성
2. 파일 권한 설정
sudo chmod 600 /swapfile
생성된 swap 파일에 보안상의 이유로 권한을 설정하여 root 권한으로만 읽기, 쓰기를 할 수 있도록한다.
root 권한 외의 사용자들이 접근 못하도록한다.
3. swap 파일 초기화
sudo mkswap /swapfile
초기화를 하는 이유는 운영체제가 해당 파일을 swap 공간으로 인식하고 관리할 수 있게 하기 위함이다.
초기화 과정에서 swap 파일은 스왑 공간으로 사용하기에 적합하고 특수한 파일시스템 형식으로 구성되며, 스왑 공간에 필요한 메타데이터가 포함된다.
초기화를 하지 않으면 운영체제는 그 파일을 swap 공간으로 인식할 수 없으며, 해당 파일을 가상 메모리로 사용하는 데 필요한 정보와 구조를 갖추지 못한다. 따라서 swap 파일을 사용하기 전 반드시 초기화 작업을 거쳐야 한다.
4. swap 파일 활성화
sudo swapon /swapfile
5. swap 파일 영구 활성화 (선택)
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
swapon 명령어만 수행할 경우 시스템이 재부팅될 때마다 swap 파일 설정이 비활성화된다. 매번 해주기 번거로우면 위 명령어를 통해 영구적으로 자동 활성화가 가능하다.
6. swappiness 값 조절 (선택)
sudo sysctl vm.swappiness=60
swappiness 값은 운영체제가 얼마나 빈번하게 swap 메모리를 사용할지 결정하는 값이다.
기본값으로 60으로 설정되어 있으며 최소 0에서 최대 100까지 값을 지정할 수 있다.
영구적으로 변경하려면 /etc/sysctl.conf 파일에 vm.swappiness=10 을 추가하면 된다.
swap 메모리 설정의 장단점
장점
- 메모리 부족 방지 - RAM이 부족할 때 설정된 swap 메모리를 사용하여 실제로 사용할 수 있는 메모리의 공간이 늘어난다.
이로 인해 메모리 부족으로 인한 시스템 정지와 같은 문제를 방지할 수 있다. - 비활성 프로세스 메모리 해제 - 시스템에 활성화 되지 않은 프로세스의 메모리는 swap 공간으로 이동시켜 활성된 프로세스에 더 많은 메모리를 할당할 수 있어 성능 향상
- 비용 절감 - swap 공간의 사용으로 인해 가격이 비싼 RAM 의 부족한 공간을 대신 사용하여 비용을 절감할 수 있다.
단점
- 성능 저하 - swap 메모리는 하드 드라이브나 SSD에 저장되므로 RAM에 비해 속도가 훨씬 느리다. 따라서 시스템의 많은 부분이 swap 메로리에서 운영된다면 속도가 느려질 수 있다.
- SSD 수명 단축 - swap 메모리가 SSD에 위치한 경우 지속적인 읽기/쓰기 작업으로 인해 SSD의 수명이 단출될 수 있다.
SSD는 제한된 쓰기 횟수를 가지기 때문에 과도한 swap사용은 수명에 영향을 줄 수 있다 - 메모리 부족에 대한 지연된 처리 - 일부 시스템에서는 메모리가 실제로 부족할 때까지 swap 공간을 사용하지 않는 경향이 있다.
이로 인해 메모리 부족 문제가 발생했을 때 처리가 지연되는 경우가 있다. - 페이지 교체 오버헤드 - 페이지를 물리적 메모리와 swap 메모리간에 이동시키는 과정에서 시간이 소요되며, 이로 인해 시스템 성능이 저하될 수 있다.
swap 메모리 실제 사용 경험
서비스를 보통 운영할 때 운영에 사용되는 서버와 개발(테스트)에 사용되는 서버를 따로 두고 있고 우리 서비스도 그렇게 구성되어있다.
우리는 상대적으로 개발서버가 사양이 낮게 최소한으로 적용되어 있는데 가끔 was 프로그램이 업데이트되어 메모리가 더 필요하게 되는 경우에 핏하게 맞춰져있던 메모리를 오버하게 되어 개발서버가 다운되었던 적이 몇번 있다.
이 상황에서 인스턴스의 스팩을 업시키기에는 비용이 부담되었기에 다른 방법을 찾던 중 swap 메모리 설정을 하게 되었는데 간단한 명령어 몇줄로 메모리에 여유를 줄 수 있게 되었다.
장점에서도 적어놓은것 처럼 AWS의 EBS 스토리지는 EC2 인스턴스의 스펙 업할 시에 추가로 드는 비용에 비해 많이 저렴하다.
그리고 개발서버의 특성상 성능이 저하되어도 크게 문제가 될게 없어 우리에게 위의 상황에서 최적의 해결방법이 되어준것같다.
현재는 실제로 swap 에서 메모리는 1Mi 정도밖에 사용되고 있지 않지만 새로운 컨테이너 실행과 같은 작업이 진행될 때는 사용되는 swap 메모리가 증가하여 메모리 부족 문제를 방지해주어 개발서버가 다운되는 현상이 현저히 줄어들게 되었다.
'Linux' 카테고리의 다른 글
SSH 간편하게 접속하기 (with EC2) (0) | 2021.12.15 |
---|