Linux / 명령어 / free - 메모리와 스왑 사용량 확인

free는 Linux 시스템의 물리 메모리(RAM)와 스왑 사용 현황을 요약해 보여 주는 명령어입니다. 메모리가 부족한지 판단할 때는 이름 그대로의 free 열보다, 새 프로그램을 스왑 없이 시작하는 데 사용할 수 있는 양을 추정한 available 열을 우선 확인하는 것이 좋습니다.

free -h

Linux는 사용하지 않는 RAM을 파일 캐시 등으로 활용하고 필요할 때 회수합니다. 따라서 free 값이 작고 buff/cache가 크다는 사실만으로 메모리 부족이라고 판단하면 안 됩니다.

free 명령어가 보여 주는 정보

free는 커널이 제공하는 /proc/meminfo를 읽어 물리 메모리와 스왑 정보를 계산합니다. 각 열의 정의와 옵션은 procps-ng free 공식 매뉴얼에서 확인할 수 있습니다.

free -h

일반적인 출력은 다음과 비슷합니다. 값은 예시이며 시스템과 procps-ng 버전에 따라 표시 형식이 달라질 수 있습니다.

               total        used        free      shared  buff/cache   available
Mem:            15Gi       4.2Gi       1.1Gi       320Mi       9.7Gi        10Gi
Swap:          2.0Gi       128Mi       1.9Gi

각 열의 의미 이해하기

total, used, free

열 의미 해석
total 사용 가능한 전체 물리 메모리 장착된 RAM 전체와 정확히 같지 않을 수 있습니다. 커널과 하드웨어가 예약한 영역 등이 제외됩니다.
used 사용 중이거나 즉시 사용할 수 없는 메모리 현재 procps-ng에서는 물리 메모리의 total - available로 계산됩니다. 버전에 따라 계산 방식이 달랐을 수 있습니다.
free 아무 용도로도 사용되지 않는 메모리 캐시로 사용 중이지만 회수 가능한 메모리는 포함하지 않습니다.

shared와 buff/cache

shared는 주로 tmpfs에서 사용하는 메모리를 나타냅니다. buff/cache는 커널 버퍼, 페이지 캐시와 회수 가능한 슬랩 메모리를 합친 값입니다.

캐시는 디스크에서 읽은 데이터를 RAM에 남겨 재접근을 빠르게 합니다. 애플리케이션에 메모리가 필요하면 커널이 회수할 수 있으므로, 캐시가 크다는 이유만으로 문제가 있는 것은 아닙니다.

available이 중요한 이유

available은 스왑을 사용하지 않고 새 애플리케이션을 시작하는 데 사용할 수 있는 메모리를 추정한 값입니다. 단순히 free + buff/cache를 더한 값이 아니라, 페이지 캐시와 실제로 회수할 수 있는 슬랩의 일부 등을 고려한 커널의 MemAvailable 정보를 사용합니다.

이 값도 미래의 메모리 사용량을 보장하는 절대값은 아닙니다. 애플리케이션이 갑자기 대량의 메모리를 요청하거나 커널이 회수하기 어려운 메모리가 늘면 상황은 빠르게 달라질 수 있습니다.

Mem과 Swap 행의 차이

물리 메모리 행

Mem 행은 실제 RAM의 전체 크기와 사용 현황을 요약합니다. 애플리케이션 메모리뿐 아니라 커널, 캐시, 공유 메모리 등 다양한 용도가 포함됩니다.

스왑 행

Swap은 RAM이 아닌 스왑 영역의 전체·사용·남은 용량을 보여 줍니다. 스왑 사용량이 0이 아니라고 해서 현재 메모리 부족이라고 단정할 수는 없습니다. 과거에 밀려난 비활성 페이지가 RAM 여유가 생긴 뒤에도 스왑에 남아 있을 수 있기 때문입니다.

반대로 스왑 사용량이 계속 증가하고, vmstat의 si와 so가 지속적으로 발생하며, 응답 시간이 나빠진다면 메모리 압박을 의심해야 합니다.

vmstat 1

자주 사용하는 옵션

사람이 읽기 쉬운 단위로 표시하기

free -h

-h 또는 --human은 값에 따라 Ki, Mi, Gi 같은 이진 단위를 자동으로 선택합니다. 고정 단위가 필요하면 -m, -g 등을 사용할 수 있습니다.

free -m
free -g

버퍼와 캐시를 나누어 보기

free --wide

-w 또는 --wide는 buff/cache를 buffers와 cache 열로 분리합니다. 상세한 원인을 분석하려면 /proc/meminfo, slabtop 등도 함께 봐야 합니다.

일정 간격으로 반복 표시하기

free -h -s 2

-s 2는 2초 간격으로 결과를 계속 표시합니다. 정해진 횟수만 출력하려면 -c를 함께 사용합니다.

free -h -s 2 -c 5

물리 메모리와 스왑 합계 보기

free -h --total

-t 또는 --total은 열 합계를 추가합니다. RAM과 스왑은 성능과 역할이 다르므로 합계만 보고 실제 사용 가능한 고속 메모리로 해석해서는 안 됩니다.

메모리 부족을 판단하는 방법

available과 스왑 입출력을 함께 보기

한 번의 free 출력보다 다음 신호를 함께 관찰하는 것이 좋습니다.

  • available이 평소보다 계속 낮아지는지
  • 스왑 사용량이 증가하는지
  • vmstat의 si·so가 지속적으로 발생하는지
  • 서비스 응답 시간과 디스크 I/O가 함께 악화되는지
  • 커널 로그에 OOM(Out of Memory) 종료 기록이 있는지
free -h
vmstat 1
journalctl -k -g 'oom\|Out of memory\|Killed process'

journalctl 검색은 배포판과 로그 설정에 따라 결과가 없을 수 있으며, 로그를 읽을 권한이 필요할 수 있습니다.

메모리를 많이 쓰는 프로세스 찾기

ps에서 메모리 사용률 기준으로 정렬해 상위 프로세스를 확인할 수 있습니다.

ps -eo pid,user,%mem,rss,comm --sort=-rss | head

RSS는 현재 물리 메모리에 올라온 페이지의 양을 나타내지만, 공유 페이지가 여러 프로세스에 중복 집계될 수 있습니다. 컨테이너, 공유 라이브러리, 파일 매핑까지 정확히 분석하려면 cgroup 지표와 smem 같은 도구를 함께 고려하세요.

캐시를 무조건 비우지 않기

페이지 캐시는 시스템 성능을 높이기 위해 커널이 관리합니다. free의 숫자를 작게 만들 목적으로 캐시를 강제로 비우면 디스크 읽기가 늘어 오히려 성능이 떨어질 수 있습니다. 재현 가능한 성능 시험처럼 명확한 목적이 있을 때만 영향과 복구 방법을 이해한 상태에서 수행하세요.

단위와 자동화에서 주의할 점

이진 단위와 십진 단위

기본 -h 표시는 1024를 기준으로 하는 KiB, MiB, GiB 계열입니다. --si를 사용하면 1000을 기준으로 하는 kB, MB, GB 계열을 사용합니다.

free -h --si

문서나 모니터링에서 서로 다른 단위를 섞으면 차이가 생기므로 기준을 명시하세요.

표시 문자열을 그대로 파싱하지 않기

free의 열과 계산 방식은 procps-ng 버전에 따라 달라질 수 있고, 사람이 읽기 쉬운 단위는 파싱에 적합하지 않습니다. 자동화에서는 가능하면 /proc/meminfo의 필요한 항목이나 모니터링 에이전트가 제공하는 구조화된 지표를 사용하고, 단위와 버전을 고정하세요.

컨테이너에서 free 값이 크게 보이는 이유

free는 /proc/meminfo를 읽습니다. 컨테이너 런타임과 cgroup 구성에 따라 이 파일이 호스트 전체 메모리에 가까운 값을 보여 줄 수 있으며, 실제 컨테이너에 적용된 메모리 제한과 다를 수 있습니다.

컨테이너의 사용 가능 용량을 판단할 때는 오케스트레이터의 요청·제한, cgroup의 메모리 한도와 현재 사용량, OOM 이벤트를 함께 확인하세요. 호스트의 free 값만으로 컨테이너가 사용할 수 있는 메모리를 단정하지 않는 것이 중요합니다.

자주 묻는 질문

free가 거의 0이면 메모리가 부족한가요?

반드시 그렇지는 않습니다. Linux가 남는 메모리를 캐시로 활용하면 free는 작아질 수 있습니다. available, 스왑 입출력, 서비스 성능을 함께 확인하세요.

buff/cache는 모두 지워도 되는 메모리인가요?

필요할 때 일부를 회수할 수 있지만 전부 즉시 회수 가능한 것은 아닙니다. available은 이러한 차이를 고려한 추정치이므로 단순히 buff/cache 전체를 여유 메모리로 더하지 않는 편이 좋습니다.

스왑을 사용하면 무조건 RAM이 부족한가요?

아닙니다. 과거의 비활성 페이지가 스왑에 남아 있을 수 있습니다. 스왑 사용량의 증가 추세, 실제 스왑 입출력과 지연이 함께 나타나는지 확인해야 합니다.

used 값은 왜 다른 도구와 다르게 보이나요?

도구와 버전마다 캐시·회수 가능 메모리를 분류하는 방식이 다를 수 있습니다. 같은 시점의 /proc/meminfo, procps-ng 버전과 각 도구의 정의를 비교하세요.

정리

free -h는 RAM과 스왑 현황을 빠르게 살펴보는 기본 명령입니다. 메모리 부족 여부는 free 열 하나가 아니라 available, 스왑 입출력, 프로세스 사용량과 서비스 지연을 함께 보고 판단해야 합니다.

부하가 함께 높다면 uptime 명령어의 평균 부하 해석 방법을 참고해 CPU와 I/O 병목 여부도 확인하세요.

같은 카테고리의 다른 글
Linux / 리눅스 Bash 명령어 연결 연산자: ;, &&, ||, &, | 사용법

Linux / 리눅스 Bash 명령어 연결 연산자: ;, &&, ||, &, | 사용법

리눅스 Bash의 ;, &&, ||, &, |, |&, ! 차이를 종료 상태와 실제 예제로 설명합니다. 조건부 실행, 백그라운드 작업, 파이프라인과 pipefail 사용법까지 정리합니다.

Linux / 명령어 / sudo - 다른 사용자 권한으로 명령 실행

Linux / 명령어 / sudo - 다른 사용자 권한으로 명령 실행

Linux sudo 명령어로 허용된 명령을 root 또는 다른 사용자 권한으로 실행하는 방법을 설명합니다. 주요 옵션, 인증 캐시, 리디렉션 문제, visudo와 최소 권한 sudoers 설정 원칙을 정리합니다.

Linux 강좌 / 파일 내용 읽기 - cat, less, more, head, tail

Linux 강좌 / 파일 내용 읽기 - cat, less, more, head, tail

cat, less, more, head, tail로 리눅스 파일 내용을 읽는 방법을 비교합니다. 짧은 파일과 긴 파일, 앞·뒤 일부를 확인할 때의 선택 기준과 실습 결과를 설명합니다.

Linux / 명령어 / mv - 파일 이동과 이름 변경

Linux / 명령어 / mv - 파일 이동과 이름 변경

Linux mv 명령어로 파일과 디렉터리를 이동하거나 이름을 변경하는 방법을 설명합니다. 덮어쓰기 방지, 파일 시스템 간 이동과 안전한 자동화 방법도 정리합니다.

Linux / 명령어 / nice - 새 명령의 CPU 우선순위 조정

Linux / 명령어 / nice - 새 명령의 CPU 우선순위 조정

Linux nice 명령어의 기본 문법과 실제 사용 예제를 설명합니다. 주요 옵션과 결과를 해석할 때 주의할 점을 확인할 수 있습니다.

Linux / 명령어 / tree - 디렉터리 구조를 트리 형태로 출력

Linux / 명령어 / tree - 디렉터리 구조를 트리 형태로 출력

Linux tree 명령어로 디렉터리와 파일 구조를 계층적으로 확인하는 방법을 설명합니다. 설치, 깊이 제한, 숨김 파일, 제외 패턴, 크기·권한 표시와 JSON 저장 방법까지 정리합니다.

Linux / 명령어 / mount - 파일 시스템 연결 상태 확인과 마운트

Linux / 명령어 / mount - 파일 시스템 연결 상태 확인과 마운트

Linux mount 명령어의 기능과 기본 문법을 설명합니다. 실제 사용 예제, 주요 옵션과 작업 전 확인할 점을 알아봅니다.

Linux / 명령어 / dd - 블록 단위 데이터 복사와 변환

Linux / 명령어 / dd - 블록 단위 데이터 복사와 변환

Linux dd 명령어로 파일과 블록 장치 데이터를 복사하고 변환하는 방법을 설명합니다. if와 of, 블록 크기, 진행률, 디스크 이미지 생성·복원 및 대상 장치 오지정 위험을 정리합니다.

Linux / 리눅스 디렉토리 구조와 주요 디렉토리별 용도

Linux / 리눅스 디렉토리 구조와 주요 디렉토리별 용도

리눅스의 /etc, /var, /usr, /home, /proc, /dev 등 주요 디렉토리별 용도와 이름의 의미를 정리합니다. 리눅스 파일시스템 구조를 처음 배우거나 서버 관리에 필요한 디렉토리를 확인할 때 참고할 수 있습니다.

Linux 강좌 / APT와 DNF로 패키지 설치·업데이트하기

Linux 강좌 / APT와 DNF로 패키지 설치·업데이트하기

Debian·Ubuntu의 APT와 Rocky Linux의 DNF로 패키지를 검색·설치·업데이트·제거하는 방법을 비교합니다. 저장소와 의존성, 업데이트 전 확인할 항목을 다룹니다.