이전에 메모리 부족으로 인한 서버 다운 문제를 해결하기 위해 스왑 메모리를 설정했다면, 서버를 업그레이드하거나 메모리 최적화를 통해 더 이상 스왑이 필요하지 않을 수 있습니다. 이 글에서는 설정된 스왑 메모리를 해제하는 방법을 알아보겠습니다.
💡 스왑(Swap)이란? 실제 물리적 메모리(RAM)가 부족할 때 하드 디스크의 일부를 가상 메모리로 사용하는 기술입니다. 마치 램의 확장 공간처럼 작동하지만, 속도는 훨씬 느립니다.
[함께 참고하면 좋은 글 추천]
- 아마존 리눅스 2023 서버 용량 늘리는 방법 (프리티어)
- 서버 하나에 워드프레스 추가 설치 및 운영하는 방법 (아마존 리눅스 2023)
- 워드프레스 FTP 자격증명 해결방법 (아마존 리눅스 2023)
- 워드프레스 고유주소 변경 에러 해결방법(아마존 리눅스 2023)
- 아마존 리눅스 2023 SSL 인증서 발급 방법
1. 스왑 메모리 해제가 필요한 경우
1-1. 하드웨어 업그레이드 후
- EC2 인스턴스 타입 변경: t2.micro(1GB RAM)에서 t3.small(2GB RAM) 등으로 업그레이드하여 충분한 물리 메모리를 확보한 경우
- 실제 RAM 증설: 물리적 서버에 RAM을 추가 설치한 경우
💡 서버 업그레이드 후에도 스왑을 유지할 수 있지만, 실제 RAM을 사용하는 것이 항상 더 빠릅니다.
1-2. 성능 최적화 목적
- I/O 병목 현상 해결: 메모리스왑은 디스크 I/O를 많이 사용하여 전체 시스템 성능 저하를 일으킬 수 있습니다.
- SSD 수명 연장: 메모리스왑은 디스크에 자주 쓰기 작업을 수행하여 SSD의 수명을 단축시킬 수 있습니다.
- 서버 응답 속도 개선: 메모리에 직접 접근하는 것이 디스크를 거치는 스왑보다 수백 배 빠릅니다.
1-3. 스토리지 공간 확보
- 디스크 공간 부족: 작은 크기의 EBS 볼륨을 사용 중이라 공간이 필요한 경우
- 용도 변경: 스왑 파일이 차지하는 공간(보통 1~2GB)을 다른 용도로 활용하고 싶은 경우
2. 스왑 메모리 해제 전 확인사항
2-1. 현재 스왑 사용량 확인
# 전체 메모리 상태 확인
free -h
설명: free
는 시스템의 메모리 사용 상태를 보여주는 명령어입니다. -h
옵션은 사람이 읽기 쉬운 형태(human-readable)로 출력합니다. 이 명령어를 실행하면 총 메모리, 사용 중인 메모리, 그리고 스왑 사용량을 쉽게 확인할 수 있습니다.
해석방법: Swap:
행의 used
열이 0에 가깝다면(예: 0Mi, 0.1Mi 등) 스왑이 거의 사용되지 않고 있으므로 안전하게 해제할 수 있습니다. 하지만 위 예시처럼 582Mi 등으로 일정량 사용 중이라면 시스템이 스왑에 의존하고 있다는 뜻입니다.
# 스왑 상세 정보 확인
sudo swapon -s
설명: swapon -s
는 시스템에 설정된 모든 스왑 공간의 상세 정보를 표 형식으로 보여줍니다. 여기서는 스왑 파일의 경로, 타입, 크기, 사용량 등을 확인할 수 있습니다.
해석방법: /swapfile
은 스왑 파일의 위치입니다. Size
와 Used
열은 각각 스왑 파일의 총 크기와 사용 중인 크기를 나타냅니다(킬로바이트 단위).
# 스왑 사용률 확인 (더 자세한 정보)
cat /proc/swaps
설명: /proc/swaps
는 시스템의 스왑 정보를 담고 있는 가상 파일입니다. cat
명령어로 이 파일을 읽어 스왑 관련 정보를 더 자세히 볼 수 있습니다.
2-2. 시스템 안정성 체크
# 현재 실행 중인 프로세스와 메모리 사용량 확인
top -o %MEM
설명: top
은 시스템에서 실행 중인 프로세스를 실시간으로 모니터링하는 도구입니다. -o %MEM
옵션은 메모리 사용량을 기준으로 내림차순 정렬합니다. 이 명령어를 실행하면 메모리를 많이 사용하는 프로세스가 맨 위에 표시되어 어떤 프로그램이 메모리를 많이 사용하는지 쉽게 파악할 수 있습니다.
사용방법: top
명령어가 실행되면 실시간으로 정보가 업데이트됩니다. 종료하려면 q
키를 누르면 됩니다.
# 메모리 집약적 프로세스 확인
ps aux --sort=-%mem | head -10
설명:
ps aux
는 모든 사용자의 모든 프로세스를 자세히 보여주는 명령어입니다.--sort=-%mem
은 메모리 사용량을 기준으로 내림차순 정렬합니다.|
(파이프)는 왼쪽 명령어의 출력을 오른쪽 명령어의 입력으로 전달합니다.head -10
은 처음 10줄만 보여줍니다.
이 명령어 조합을 통해 메모리를 가장 많이 사용하는 상위 10개 프로세스를 확인할 수 있습니다.
⚠️ 주의사항: 스왑이 활발히 사용 중인 상태에서 갑작스럽게 해제하면 시스템이 불안정해질 수 있습니다. 스왑 사용량이 높다면(전체 스왑 공간의 25% 이상), 피크 시간을 피해 작업하거나 먼저 메모리 사용량을 줄이는 것이 좋습니다.
3. 단계별 스왑 메모리 해제 방법
3-1. 스왑 파일 비활성화
sudo swapoff /swapfile
설명:
sudo
는 관리자 권한으로 명령을 실행합니다.swapoff
는 스왑 공간을 비활성화하는 명령어입니다./swapfile
은 스왑 파일의 위치입니다.
이 명령어는 즉시 스왑 파일을 비활성화합니다. 시스템은 스왑 파일에 있던 데이터를 RAM으로 옮기려고 시도합니다. 스왑 사용량이 많은 경우 이 과정이 몇 분 정도 걸릴 수 있으며, RAM이 부족하면 일부 프로세스가 종료될 수 있습니다.
💡 참고: 시스템이 응답하지 않거나 너무 느려진다면, RAM이 부족한 것일 수 있습니다. 이 경우 Ctrl+C로 명령을 취소하고 서버 업그레이드를 먼저 고려하세요.
3-2. /etc/fstab에서 스왑 항목 제거
sudo vi /etc/fstab
설명:
vi
는 텍스트 편집기를 실행합니다(처음 사용하는 경우 불편할 수 있음, 대안으로nano
도 사용 가능)./etc/fstab
은 시스템 부팅 시 자동으로 마운트되는 파일시스템 목록이 저장된 파일입니다.
아래 라인을 찾아서 삭제합니다:
/swapfile swap swap defaults 0 0
vi 편집기 기본 사용법:
- 화살표 키로 커서 이동
- 아래 라인을 찾습니다:
/swapfile swap swap defaults 0 0
dd
키를 눌러 해당 줄 삭제:wq
를 입력하고 Enter 키를 눌러 저장하고 종료
설명: 이 단계는 시스템이 재부팅될 때 스왑 파일을 자동으로 활성화하지 않도록 설정을 변경하는 것입니다. 이 단계를 수행하지 않으면 서버를 재시작할 때마다 스왑이 다시 활성화됩니다. 그러니 위 코드를 꼭 삭제해 주세요!
3-3. 스왑 파일 삭제
sudo rm /swapfile
설명:
rm
은 파일을 삭제하는 명령어입니다./swapfile
은 삭제할 스왑 파일의 경로입니다.
이 명령어는 스왑 파일을 영구적으로 삭제합니다. 만약 나중에 필요할 것 같다면, 이 단계를 건너뛰고 스왑 파일을 보관해도 됩니다.
⚠️ 주의:
rm
명령어로 삭제한 파일은 복구할 수 없습니다. 확실하지 않다면 미리 백업하는 것이 좋습니다.
3-4. 스왑 해제 확인
# 스왑 상태 확인
free -h
확인 포인트: Swap:
행의 total
이 0B로 표시되면 스왑이 완전히 해제된 것입니다.
# 스왑 목록 확인 (빈 결과가 나와야 함)
sudo swapon -s
# fstab 설정 확인
grep swap /etc/fstab
설명: grep
은 파일에서 특정 패턴을 검색하는 명령어입니다. 이 명령어는 /etc/fstab
파일에서 ‘swap’이라는 단어가 포함된 줄을 찾습니다.
예상 출력: 앞서 스왑 항목을 제대로 제거했다면, 아무것도 출력되지 않아야 합니다.
4. 스왑 해제 후 최적화 작업
4-1. 메모리 캐시 정리
# 페이지 캐시 정리
sudo sh -c 'sync && echo 1 > /proc/sys/vm/drop_caches'
# 또는 모든 캐시 정리
sudo sh -c 'sync && echo 3 > /proc/sys/vm/drop_caches'
4-2. swappiness 값 초기화 (선택사항)
# 기본값으로 복원
sudo sysctl vm.swappiness=60
설명:
sysctl
은 커널 매개변수를 실시간으로 변경할 수 있는 명령어입니다.vm.swappiness=60
은 스왑 사용 성향을 나타내는 값으로, 기본값은 60입니다.
swappiness란? 이 값은 시스템이 RAM 대신 스왑을 사용하는 경향을 결정합니다. 값이 클수록(최대 100) 스왑을 더 적극적으로 사용하고, 값이 작을수록(최소 0) RAM을 더 많이 사용합니다. 스왑을 설정할 때 이 값을 낮췄다면(예: 10), 이제 기본값으로 돌려놓는 것이 좋습니다.
# 영구적 적용을 위해 /etc/sysctl.conf 수정
echo "vm.swappiness=60" | sudo tee -a /etc/sysctl.conf
설명:
echo
는 문자열을 출력합니다.|
(파이프)는 앞 명령어의 출력을 뒤 명령어의 입력으로 전달합니다.tee
는 입력 받은 내용을 파일에 기록하면서 동시에 화면에도 출력합니다.-a
는 파일 끝에 추가(append)하라는 옵션입니다./etc/sysctl.conf
는 부팅 시 적용되는 커널 매개변수 설정 파일입니다.
이 명령어는 재부팅 후에도 swappiness 값이 60으로 유지되도록 설정 파일에 추가합니다.
결론
스왑 메모리 해제는 시스템 성능 향상과 스토리지 공간 확보에 도움이 됩니다. 하지만 충분한 물리 메모리 확보와 시스템 안정성 확인이 선행되어야 합니다. 해제 후에는 지속적인 모니터링을 통해 시스템이 안정적으로 운영되는지 확인하는 것이 중요합니다.
물리 메모리가 부족해질 경우 언제든지 스왑을 다시 설정할 수 있으므로, 시스템 요구사항에 맞춰 유연하게 대응하시기 바랍니다.