우당탕탕
Linux 메모리 부족 원인 추적해본 후기와 꼭 확인할 체크리스트 본문
Linux 서버에서 메모리 부족 현상이 발생해서 원인을 찾다 보니 생각보다 복잡하더라고요. 저도 처음엔 단순히 메모리 사용량만 보는 줄 알았는데, 실제로는 스왑 사용, 캐시, 그리고 프로세스 메모리 사용 패턴까지 꼼꼼히 살펴야 하더라고요.
이 글에서는 제가 Linux 메모리 부족 문제를 추적할 때 사용한 명령어부터, 흔히 간과하기 쉬운 설정값, 그리고 문제 해결을 위해 꼭 확인해야 할 체크리스트를 한 번에 정리해 봤습니다.
제 서버 환경과 사용한 도구
기본적으로 Ubuntu 20.04 LTS를 사용했고, 서버 메모리는 16GB입니다. 모니터링을 위해 htop, vmstat, free 등을 주로 사용했습니다.
Linux 메모리 상태 파악은 이렇게 하면 됩니다
사실 메모리 부족이라고 단순히 free -m 만 보는 건 부족한 접근입니다. 캐시, 버퍼가 실제 사용 가능한 메모리를 차지하는지 판단하려면 더 깊게 봐야 하거든요.
# 메모리 현황 요약 보기 (MB 단위)
free -m
# 스왑 사용량 체크
swapon --show
# vmstat로 메모리, CPU, I/O 상태 동시 확인
vmstat 1 5
# 프로세스별 메모리 사용량 상위 10개 보기
ps aux --sort=-%mem | head -n 10
# 캐시, 버퍼 메모리 상세 보기
cat /proc/meminfo | egrep 'Cached|Buffers|MemFree|MemAvailable'
이 명령어들만 잘 활용해도 어느 정도 문제 원인을 좁힐 수 있는데요, 저는 특히 MemAvailable 항목에 주목했어요. 시스템이 실제로 쓸 수 있는 메모리를 정확히 보여줘서, 단순 MemFree보다 훨씬 유용하더라고요.
제가 경험한 메모리 부족 원인과 해결법
많은 분들이 메모리 부족 문제를 CPU 과부하처럼 단순하게 보시는데, 저는 다음 주요 원인이 복합적으로 작용한 걸 발견했어요.
- 과도한 스왑 사용 – 시스템이 스왑 공간을 적극적으로 사용하면서 성능 저하가 발생했습니다.
- 메모리 릭(leak) 있는 프로세스 존재 – 특정 데몬이 메모리를 점차 점유하는 증상이었어요.
- 캐시와 버퍼 관리 미흡 – 캐시가 너무 많아 실제로 가용 메모리가 적어 보이는 경우였습니다.
- OOM killer 발동 빈도 증가 – 메모리 부족 상황에서 프로세스가 강제 종료되는 문제가 발생했죠.
이걸 해결하기 위해서 저는 다음 작업을 했습니다.
vm.swappiness값 조정: 디폴트는 60인데, 10~20 사이로 낮춰서 스왑 사용을 줄였어요.- 메모리 사용량이 급증하는 프로세스 찾아내서 재시작하거나 메모리 릭 패치 적용
- 캐시 정리 주기적으로 실행 (예:
echo 3 > /proc/sys/vm/drop_caches)
중요! 메모리 문제 잡을 때 꼭 확인해야 할 체크리스트 ✅
많은 분들이 간과하는 부분이 있는데요, 이 체크리스트는 제가 삽질하면서 직접 적어둔 겁니다. 꼭 챙겨보세요.
- 스왑 사용률 확인:
swapon --show와free -m로 스왑 상황 꼭 봐야 해요. 스왑 과도하면 원인을 더 찾아봐야 합니다. - vm.swappiness 설정:
cat /proc/sys/vm/swappiness으로 확인 후 필요시sysctl -w vm.swappiness=10같은 식으로 조절하세요. - 프로세스 메모리 사용률:
ps aux --sort=-%mem | head -n 10로 메모리 많이 쓰는 프로세스 체크 - 커널 로그 내 OOM killer 발생 여부:
dmesg | grep -i 'oom'로 최근 메모리 강제 종료 로그가 있는지 확인 - 캐시/버퍼 메모리 상태:
cat /proc/meminfo | grep -e Cached -e Buffers -e MemAvailable를 확인해서 캐시가 실제 사용 가능 메모리를 얼마나 올리는지 판단
제가 겪은 삽질과 해결 과정 공유
이 부분에서 저는 한참 헤맸는데요, 처음엔 단순히 free -m 명령의 used 메모리만 보고 서버가 메모리가 다 찼다고 판단했어요. 그런데 막상 프로세스만 봐도 메모리 많이 사용 중인 프로세스가 보이지 않더라고요.
그래서 스왑을 봤더니, 스왑이 과도하게 사용되고 있었고, vm.swappiness 값이 기본 60으로 너무 높아서 스왑을 너무 적극적으로 쓰고 있었죠. 이거 낮추고 난 후 메모리 부족 현상이 크게 완화됐습니다.
# swappiness 확인과 조절 예시
cat /proc/sys/vm/swappiness
# 출력: 60
# swappiness를 10으로 낮춤
sudo sysctl -w vm.swappiness=10
# 설정을 영구화하려면
sudo sh -c 'echo "vm.swappiness=10" >> /etc/sysctl.conf'
# 변경 내용 적용
sudo sysctl -p
또한, 메모리 릭 있는 프로세스를 발견했는데요. ps aux --sort=-%mem 명령으로 특정 서비스가 메모리 크게 차지한 걸 확인하고 재시작해서 해결했어요.
심화: 캐시와 버퍼를 적절히 관리하려면
사실 Linux는 메모리를 ‘최대한 활용하는’ 특성이 있어서, 캐시와 버퍼 메모리가 꽤 차 있어도 꼭 메모리 부족 상태는 아니에요. 이걸 잘 이해하는 게 중요하더라고요.
만약 캐시가 너무 쌓여서 메모리 부족 알림이 계속 뜬다면, 아래 명령어로 캐시를 주기적으로 비워주면 도움이 됩니다. 다만, 너무 자주 하면 오히려 성능에 악영향일 수 있습니다.
# 캐시 비우기 (root 권한 필요)
echo 3 | sudo tee /proc/sys/vm/drop_caches
캐시/버퍼 메모리 상태는 cat /proc/meminfo에서 Cached, Buffers, MemAvailable 값을 보고 판단하세요.
자주 받는 질문들
Q. 메모리 부족인데 스왑이 전혀 없을 때 어떻게 하나요?
A. 스왑이 없으면 메모리가 꽉 찰 때 OOM killer가 바로 작동합니다. 이 경우 스왑 영역을 새로 만들거나 추가하는 걸 추천해요. 아래처럼 쉬운 명령어로 설정할 수 있습니다.
# 스왑 파일 생성 예시 (1GB)
sudo fallocate -l 1G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
# /etc/fstab에 추가해서 부팅 시 자동 마운트
sudo sh -c 'echo "/swapfile none swap sw 0 0" >> /etc/fstab'
# 다시 확인
swapon --show
Q. OOM killer가 자주 발생해요. 근본적으로 해결하는 방법은?
A. 메모리를 과도하게 사용하는 특정 프로세스를 찾아서 설정 조절하거나 필요한 경우 스케일 아웃(서버 추가)도 검토하세요. 또한, 캐시 관리와 스왑 정책도 같이 점검해야 합니다.
제가 겪은 경험을 토대로 메모리 부족 문제는 단순하게 보지 말고 시스템 전체 상황을 종합적으로 판단하는 게 중요하다는 걸 느꼈어요. 특히 체크리스트를 꼭 하나씩 보면 훨씬 원인 파악과 대응이 빨라지더라고요.
'Linux' 카테고리의 다른 글
| 2026년 기준 Ubuntu 서버 초기 설정 보안 강화하는 방법 실제로 해봤어요 (0) | 2026.06.02 |
|---|---|
| Linux systemd 서비스 등록하면서 꼭 확인해야 할 체크리스트 (0) | 2026.06.01 |
| Linux 명령어 실무에서 매일 쓰는 것들 직접 써보며 정리한 팁 (0) | 2026.05.29 |
| Linux cron job 설정하다가 저도 실수했던 부분들과 해결 방법 (0) | 2026.05.26 |
| Linux 명령어 실무에서 매일 쓰는 것들, 제가 직접 겪은 삽질과 해결법 (0) | 2026.05.23 |
