free -h를 봤더니 메모리가 거의 다 used라 깜짝 놀란 적 있을 겁니다. 하지만 대부분은 정상입니다. 헷갈리는 핵심은 딱 하나, buff/cache는 비어 있는 메모리나 다름없다는 사실입니다. 진짜 봐야 할 값은 available입니다.
buff/cache는 "빌려 쓰는" 메모리
리눅스는 남는 메모리를 놀리지 않습니다. 한 번 읽은 파일을 메모리에 캐싱(page cache)해 다음 접근을 빠르게 합니다. 이게 buff/cache입니다. 핵심은, 앱이 메모리를 더 요구하면 커널이 이 캐시를 즉시 반납한다는 점입니다. 그래서 캐시는 "쓰는 중이지만 필요하면 바로 내줄 수 있는" 메모리입니다.
| 항목 | 의미 | 부족 판단에 쓰나 |
|---|---|---|
used | 앱이 실제 점유 | 단독으로는 오해 유발 |
buff/cache | 파일 캐시·버퍼 | 필요시 반납됨, 부족 아님 |
free | 한 번도 안 쓴 빈 메모리 | 보통 작게 유지됨 |
available | 앱이 새로 쓸 수 있는 추정량 | 이걸 봐야 함 |
free가 작은 건 정상입니다. 리눅스는 "안 쓰는 메모리는 낭비"라는 철학이라 빈 메모리를 캐시로 채워둡니다.
free 출력 읽기
로컬 터미널
free -h
OUTPUT
total used free shared buff/cache available
Mem: 15Gi 4.2Gi 0.4Gi 0.1Gi 10Gi 10Gi
free가 0.4Gi뿐이라 위험해 보이지만, available이 10Gi입니다. buff/cache의 10Gi 대부분이 필요하면 반납되기 때문입니다. 즉 새 앱은 약 10Gi까지 쓸 수 있어 메모리는 충분합니다.
진짜 부족한 상황은 available이 작아지고 swap의 used가 늘어날 때입니다.
로컬 터미널
free -h # available 컬럼을 먼저 본다
cat /proc/meminfo # MemAvailable 등 상세 항목
캐시는 일부러 비우지 마라
"캐시가 아까우니 비우자"며 drop_caches를 습관적으로 쓰는 건 보통 손해입니다. 캐시를 날리면 다음 파일 접근이 다시 느려집니다. 커널이 알아서 관리하니, available이 충분하면 손대지 않는 게 정답입니다.
요점 정리
buff/cache는 파일 캐시 — 필요하면 즉시 반납되는, 사실상 여유 메모리.free가 작은 건 정상. 리눅스는 빈 메모리를 캐시로 채운다.- 메모리 여유는
free가 아니라available로 판단한다. - 진짜 위험 신호는
available급감 +swap used증가.
free·/proc/meminfo·swap을 직접 들여다보며 메모리 상태를 읽는 실습은 리눅스 트랙에서 회원가입 없이 무료로 익힐 수 있습니다.