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 병목 여부도 확인하세요.









