조회수: 0
목차
swap이 부족하면 어떤 문제가 생길까
리눅스 서버에서 물리 메모리만 믿고 운영하다 보면 어느 순간 다음과 같은 증상을 마주하게 된다.
애플리케이션이 이유 없이 종료되거나 메모리 관련 오류를 남기고 죽는다.
갑자기 서버가 매우 느려지고 ssh 접속조차 버벅거린다.
커널 로그에 OOM 이라는 단어가 등장하며 특정 프로세스를 강제로 종료한다.
이 상황에서 swap이 너무 작거나 아예 없는 경우가 많다.
swap은 디스크 공간 일부를 가상 메모리처럼 사용하는 영역이기 때문에 메모리가 순간적으로 부족해질 때 완충 역할을 해 준다. 속도는 느리지만 최소한 프로세스가 바로 죽어 버리는 것은 막을 수 있다.
현재 메모리와 swap 상태 확인
swap 크기를 늘리기 전에 지금 상태를 먼저 확인하는 것이 좋다.
메모리와 swap 사용량 확인
free -h
여기에서 Swap 행의 total 값이 현재 swap 크기다. zero에 가깝거나 아주 작은 값이라면 부족하다고 볼 수 있다.
현재 활성화된 swap 영역 확인
swapon --show
여기서
- 파일 기반 swap인지
- 파티션 기반 swap인지
- 현재 크기는 어느 정도인지
를 한눈에 확인할 수 있다. 파일 기반 swap이라면 경로가 보이고 파티션 기반이라면 디바이스 이름이 보인다.
이 글에서는 관리가 더 쉬운 파일 기반 swap을 늘리는 방법을 기준으로 설명한다.
swap 파일과 swap 파티션 간단 비교
swap 영역은 두 가지 방식으로 만들 수 있다.
- 전용 파티션을 사용하는 방식
- 일반 파일 시스템에 swap 파일을 만드는 방식
요즘은 클라우드나 가상 서버 환경이 많기 때문에 파티션을 다시 자르기보다 swap 파일을 쓰는 편이 압도적으로 편하다.
swap 파일의 장점
- 필요할 때 파일만 새로 만들거나 늘리면 된다
- 파티션을 건드리지 않아 위험이 적다
- 대부분의 배포판에서 공식적으로 지원한다
이미 파티션 기반 swap을 쓰고 있어도 새로 swap 파일을 추가해 총량을 늘리는 것이 가능하다. 다만 여기에서는 가장 흔한 시나리오인 swap 파일 생성과 확장에 집중한다.
기존 swap 파일을 직접 늘리는 방법보다 안전한 우회
swap 파일을 이미 쓰고 있을 때 가장 먼저 떠오르는 생각은 기존 파일 크기를 직접 늘리는 것이다. 하지만 swap 파일은 활성화된 상태에서 직접 크기를 변경하면 손상 위험이 있고 절차도 깔끔하지 않다.
실무에서는 대체로 다음 두 가지 방식 중 하나를 추천한다.
- 기존 swap 파일을 끄고 새 파일을 만들어 교체
- 기존 swap 파일은 그대로 두고 새 swap 파일을 하나 더 만들어 총량을 늘림
두 번째 방법이 훨씬 안전하다. 기존 설정을 건드리지 않고 새 파일만 추가하면 되기 때문에 롤백도 쉽다.
새로운 swap 파일 추가해 총량 늘리기
예를 들어 현재 서버에 1기가바이트 swap이 있고 여기에 2기가바이트를 더 붙여 총 3기가바이트로 만들고 싶다고 하자.
추가할 swap 파일 경로를 예로 들면 아래처럼 둘 수 있다.
- 기존 swap 파일이 등 swapfile
- 새 swap 파일은 등 swapfile2
추가 swap 파일 생성
먼저 빈 파일을 만든다. fallocate를 쓰면 빠르게 생성할 수 있다. 2기가바이트 예시는 다음과 같다.
sudo fallocate -l 2G /swapfile2
일부 파일 시스템에서는 fallocate 대신 dd를 쓰는 편이 안전할 때도 있다.
sudo dd if=/dev/zero of=/swapfile2 bs=1M count=2048
생성 후 권한을 제한한다.
sudo chmod 600 /swapfile2
권한을 600으로 맞추지 않으면 보안 경고가 뜨거나 활성화가 거부될 수 있다.
swap 영역으로 초기화
이제 이 파일을 swap으로 포맷한다.
sudo mkswap /swapfile2
완료되면 다음 명령으로 바로 활성화할 수 있다.
sudo swapon /swapfile2
다시 상태를 확인해 총 swap량이 늘어났는지 본다.
swapon --show
free -h
Swap total 값이 늘어났다면 새 swap 파일이 정상적으로 추가된 것이다.
부팅 시 자동 활성화를 위해 fstab 수정
현재 상태는 일시적이라 재부팅 후에는 새 swap 파일이 사라진다. 영구적으로 쓰려면 fstab에 한 줄을 추가해야 한다.
sudo nano /etc/fstab
파일 맨 아래에 다음과 비슷한 줄을 추가한다.
/swapfile2 none swap sw 0 0
저장 후 다음 명령으로 문법을 간단히 점검한다.
sudo mount -a
오류가 없다면 설정이 잘된 것이다. 다음 부팅부터는 새로운 swap 파일도 자동으로 활성화된다.
기존 swap 파일 대신 새 파일로 교체하기
기존 swap 파일이 너무 작아서 아예 덮어쓰고 싶을 때는 교체 절차를 따라야 한다. 이때는 메모리 여유를 좀 확보해 두는 것이 좋다.
대략적인 순서는 다음과 같다.
1 새 swap 파일을 원하는 크기로 만든다
2 새 파일을 swap으로 포맷한다
3 기존 swap 파일을 일시적으로 비활성화한다
4 새 swap 파일을 활성화한다
5 fstab에서 기존 항목을 새 항목으로 교체한다
기존 swap 비활성화
sudo swapoff /swapfile
새 swap 활성화
sudo swapon /swapfile2
확인 후 fstab에서 예전 줄을 지우고 새 줄로 바꾼다.
/swapfile2 none swap sw 0 0
재부팅 후에도 원하는 swap 크기로 유지되는지 꼭 확인한다.
swappiness 조정으로 swap 사용 성향 조절
swap 크기를 늘렸다고 해서 항상 좋은 것만은 아니다. 디스크가 느리거나 swap 사용량이 많으면 시스템 전체가 심하게 느려질 수 있다.
리눅스 커널은 swappiness라는 값을 통해 메모리와 swap 사용 비율을 조절한다. 값이 높을수록 swap을 적극적으로 사용하는 편이고 낮을수록 물리 메모리를 최대한 쓰려 한다.
현재 값 확인
cat /proc/sys/vm/swappiness
많은 배포판이 60 정도를 기본값으로 둔다. 서버에서는 다음과 같은 값으로 많이 조정한다.
- 어느 정도 swap 사용을 허용
- 30 언저리
- swap을 거의 쓰고 싶지 않음
- 10 이하
일시적으로 값을 바꾸려면 다음과 같이 입력한다.
sudo sysctl vm.swappiness=20
영구 적용을 위해 등 sysctl.conf에 다음 줄을 추가한다.
vm.swappiness=20
이 값을 조정하면서 free 명령과 실제 서비스 반응 속도를 함께 관찰하면 적당한 지점을 찾는 데 도움이 된다.
SSD와 swap 사용 시 주의할 점
최근 서버는 SSD를 많이 사용한다. SSD 위에 swap을 크게 잡으면 두 가지를 함께 고려해야 한다.
- 장점
- HDD보다 훨씬 빠른 속도로 swap을 처리한다
- 단점
- 쓰기 횟수가 많아지면 디스크 수명에 영향을 줄 수 있다
일반적인 서버 워크로드에서는 swap 때문에 SSD가 금방 죽는 경우는 드물지만 다음과 같은 습관을 들이면 좋다.
- swap을 메모리 부족 상황에서의 비상용으로 인식하고
- 상시로 많은 용량이 swap에 머무는 상황이 반복된다면
- 애플리케이션 튜닝이나 실제 메모리 증설을 우선 검토한다
swap 사용량이 항상 높게 유지된다면 단순히 파일 크기만 늘릴 문제가 아닐 수 있다.
swap 늘린 뒤 모니터링 포인트
swap 파일 크기를 늘린 후에는 일정 기간 동안 사용 패턴을 관찰하는 것이 중요하다.
주기적으로 확인해 볼 지표
- free 명령으로 메모리와 swap 사용량
- vmstat이나 top에서 si so 값과 메모리 상태
- 애플리케이션 응답 시간과 오류 발생 여부
swap 사용량이 어느 정도 올라갔다가 다시 줄어드는 흐름이면 정상적인 완충 역할을 하는 것으로 볼 수 있다. 반대로 계속 swap이 꽉 찬 상태라면 근본적인 메모리 부족이므로 프로세스 최적화나 메모리 증설을 고려해야 한다.
마무리 메모리 부족 서버에서 swap을 다루는 현실적인 전략
정리하면 서버 리소스 부족 상황에서 swap 파일 크기를 늘리는 절차는 생각보다 단순하다.
- free와 swapon으로 현재 상태를 먼저 확인하고
- 새로운 swap 파일을 만들어 추가하거나 기존 파일을 더 큰 파일로 교체하고
- fstab에 등록해 부팅 시 자동 활성화를 보장하며
- swappiness를 조절해 swap 사용 성향을 서버 용도에 맞게 맞추면 된다
swap은 근본적인 메모리 부족을 해결하는 수단이라기보다 위기 상황에서 서버를 지켜 주는 에어백에 가깝다. 파일 크기를 늘리는 기술적인 방법을 익히는 동시에 왜 메모리가 부족해지는지 원인을 함께 분석하면 훨씬 안정적인 서버 운영에 다가갈 수 있다.