리눅스 메모리 부족할 때 free 명령어 완벽 정복 - 실무 예제부터 버퍼·캐시 해석까지

개요

Ubuntu 및 Linux 환경에서 시스템 메모리 상태를 점검할 때 가장 먼저 사용하는 핵심 도구가 바로 free 명령어입니다. 본 글에서는 free 명령어의 기본 단위 변환 옵션부터 available과 buff/cache 필드의 정확한 의미, 실시간 메모리 모니터링 기법까지 실무 중심으로 알기 쉽게 살펴봅니다.

1. 기본 메모리 확인과 가독성을 높이는 단위별 옵션 (-h, -m, -g)

free 명령어는 리눅스 시스템의 물리 메모리(RAM)와 스왑(Swap) 메모리의 전체 용량, 사용량, 여유 공간을 확인하는 기본 명령어입니다.
아무 옵션 없이 실행하면 기본 단위인 KiB(Kibibyte) 기준으로 수치가 출력되어 직관적인 크기 파악이 다소 어려울 수 있습니다.
⚙️ [주요 옵션]

-b : 메모리 용량을 바이트(Byte) 단위로 출력합니다.
-k : 메모리 용량을 킬로바이트(KiB) 단위로 출력합니다(기본값).
-m : 메모리 용량을 메가바이트(MiB) 단위로 출력합니다.
-g : 메모리 용량을 기가바이트(GiB) 단위로 출력합니다.
--mega : 1024 단위가 아닌 1000 단위(1MB = 1,000,000B)의 메가바이트 단위로 출력합니다.
--giga : 1000 단위(1GB = 1,000,000,000B)의 기가바이트 단위로 출력합니다.
-h : 사람이 읽기 쉽도록 용량 크기에 맞춰 적절한 단위(B, Ki, Mi, Gi, Ti)를 자동으로 붙여 출력합니다.
-w : 버퍼(buffers)와 캐시(cache) 항목을 합치지 않고 각각 분리하여 넓은(wide) 화면으로 출력합니다.
-c [횟수] : 지정한 횟수만큼 화면에 메모리 상태를 반복해서 출력합니다.
-s [초] : 지정한 초(초 단위 지연 시간) 간격으로 메모리 상태를 지속적으로 갱신하여 확인합니다.
-t : 물리 메모리와 스왑 메모리의 합계를 보여주는 총합(Total) 행을 추가로 출력합니다.

free

free -h 명령어는 메모리 용량을 사람이 읽기 쉬운 형태(Human-readable)로 자동 변환하여 출력합니다.
용량 크기에 따라 GiB, MiB, KiB 등의 단위를 자동으로 붙여주므로 현재 메모리 현황을 가장 직관적이고 빠르게 파악할 수 있어 실무에서 가장 자주 사용됩니다.

free -h

free -m 명령어는 모든 메모리 수치를 메가바이트(MiB) 단위로 통일하여 출력합니다.
단위 표기가 숫자로만 깔끔하게 정렬되어 출력되므로 쉘 스크립트에서 메모리 사용량을 파싱하거나 메가바이트 단위의 정밀한 수치 비교가 필요할 때 유용합니다.

free -m

2. 출력 컬럼 완벽 분석: free vs available 및 버퍼·캐시(buff/cache) 분리 출력

free -h 명령어는 메모리 사용 현황을 사람이 읽기 쉬운 단위로 출력하여 각 컬럼별 수치를 한눈에 파악할 수 있습니다.
여기서 free 컬럼은 시스템에서 완전히 사용되지 않고 비어 있는 순수 미사용 메모리를 의미합니다.
반면 available 컬럼은 프로세스가 메모리를 요청할 때 버퍼나 캐시 영역에서 즉시 회수하여 할당해 줄 수 있는 실제 가용 메모리 추정치입니다.
따라서 리눅스 시스템의 실질적인 메모리 여유 공간을 판단할 때는 free가 아닌 available 수치를 기준으로 확인해야 합니다.

free -h

free -h -w 명령어는 -w 옵션을 추가하여 합쳐져 있던 buff/cache 항목을 buffers와 cache로 각각 분리해 출력합니다.
buffers는 디스크 블록 입출력 대기 및 파일시스템 메타데이터 처리를 위해 커널이 임시로 사용하는 메모리 공간입니다.
cache는 파일 읽기 속도 향상을 위해 디스크에서 읽은 파일 데이터를 메모리에 보관해 두는 페이지 캐시 영역입니다.
두 영역 모두 메모리 부족 시 커널이 즉시 비워내어 다른 프로세스에 재할당할 수 있는 안전한 여유 공간입니다.

free -h -w

head -n 10 /proc/meminfo 명령어는 커널이 관리하는 메모리 통계의 원천 정보를 직접 확인하기 위해 가상 파일시스템의 상위 10개 항목을 조회합니다.
free 명령어가 출력하는 MemTotal, MemFree, MemAvailable, Buffers, Cached 등의 값은 모두 이 /proc/meminfo 파일의 데이터를 기반으로 계산됩니다.
명령어 출력 결과의 신뢰성을 교차 검증하거나 시스템 내부의 상세 메모리 통계를 심층 분석할 때 활용할 수 있습니다.

head -n 10 /proc/meminfo

3. 실시간 메모리 추적과 합계 행(Total) 표시 (-s, -c, -t)

free -h -t 명령어는 -t 옵션을 추가하여 물리 메모리(Mem)와 스왑 메모리(Swap)의 수치를 합산한 Total 행을 함께 출력합니다.
시스템 전체에서 가용한 총 메모리 용량과 현재 전체 사용량을 단일 행에서 직관적으로 파악할 수 있어 전체 리소스 규모를 종합적으로 평가할 때 유용합니다.

free -h -t

free -h -s 2 -c 3 명령어는 2초 간격(-s 2)으로 메모리 상태를 측정하여 총 3회(-c 3) 반복 출력합니다.
특정 작업이나 프로세스 실행 중 발생하는 실시간 메모리 변동 추이를 주기적으로 추적하고 모니터링할 때 효과적으로 활용할 수 있습니다.

free -h -s 2 -c 3

4. 메모리 부하 테스트를 통한 동적 메모리 변화 관찰

메모리 부하 테스트를 진행하기 위해 가상 부하 발생 도구인 stress 패키지를 설치합니다.

apt-get update -qq && apt-get install -y stress

free -h 명령어는 메모리 부하를 발생시키기 전 시스템의 기준 메모리 상태를 확인합니다.
현재 used는 5.2GiB, free는 1.2GiB, 가용 메모리인 available은 2.0GiB로 측정되어 안정적인 유휴 공간을 유지하고 있습니다.

free -h

stress --vm 1 --vm-bytes 256M --timeout 5s 명령어는 256MB 크기의 메모리를 할당하고 해제하는 가상 메모리 작업자 1개를 5초 동안 실행하여 일시적인 메모리 부하를 생성합니다.
시스템에 인위적인 워크로드를 주입하여 메모리 사용량의 동적 변화를 유도합니다.

stress –vm 1 –vm-bytes 256M –timeout 5s

free -h 명령어는 부하 테스트 직후의 메모리 상태를 다시 확인하여 수치 변화를 관찰합니다.
부하 테스트 전과 비교했을 때 used가 5.2GiB에서 5.3GiB로 증가하고, free는 1.2GiB에서 1.0GiB로, available은 2.0GiB에서 1.9GiB로 각각 감소하여 부하 작업에 메모리가 즉각적으로 할당되었음을 확인할 수 있습니다.

free -h

지금까지 리눅스에서 메모리가 부족할 때 활용하기 좋은 free 명령어의 실무 예제와 버퍼·캐시 해석법을 간단하게 정리해보았습니다.
알려드린 핵심 옵션과 지표들을 잘 활용하셔서 서버 메모리 상태를 보다 빠르고 정확하게 진단해보시길 바랍니다.