Linux Page Cache란? 파일 캐시의 동작 원리와 메모리 성능 최적화 방법

Linux 서버를 운영하다 보면 free -h 명령을 실행했을 때 메모리가 거의 모두 사용 중인 것처럼 보이는 경우가 있습니다. 하지만 실제로는 애플리케이션이 메모리를 모두 사용하는 것이 아니라 Page Cache(페이지 캐시) 가 많은 메모리를 차지하고 있는 경우가 대부분입니다.

Page Cache는 디스크에서 읽은 데이터를 메모리에 임시 저장하여 같은 데이터를 다시 요청할 때 디스크를 거치지 않고 메모리에서 즉시 제공하는 기능입니다. SSD가 빠르다고 해도 메모리보다 훨씬 느리기 때문에 Page Cache는 Linux 성능 향상에 매우 중요한 역할을 합니다.

이번 글에서는 Page Cache의 개념과 동작 원리, 확인 방법, 캐시 삭제 방법, 그리고 실무 활용 사례를 자세히 알아보겠습니다.

Page Cache란?

Page Cache는 디스크에서 읽은 파일 데이터를 메모리에 저장하는 Linux Kernel의 캐시 영역입니다.

애플리케이션이 동일한 파일을 다시 읽으면 디스크 I/O 없이 메모리에서 바로 데이터를 가져옵니다.

동작 과정은 다음과 같습니다.

Application

↓

read()

↓

Page Cache 확인

↓

캐시 존재

↓

메모리에서 즉시 반환

또는

↓

캐시 없음

↓

디스크 읽기

↓

Page Cache 저장

↓

Application 반환

한 번 읽은 데이터는 캐시에 남아 있어 이후 접근 속도가 크게 향상됩니다.

Page Cache가 필요한 이유

디스크 접근은 메모리 접근보다 훨씬 느립니다.

대략적인 접근 속도는 다음과 같습니다.

저장 장치접근 속도
CPU Cache수 ns
RAM수십 ns
NVMe SSD수십 μs
SATA SSD수백 μs
HDD수 ms

같은 파일을 반복해서 읽는 경우라면 메모리에서 읽는 것이 훨씬 효율적입니다.

Page Cache 동작 과정

예를 들어 /var/log/messages 파일을 처음 읽는 경우입니다.

Application

↓

Disk Read

↓

Page Cache 저장

↓

Application

두 번째부터는 다음과 같이 동작합니다.

Application

↓

Page Cache

↓

Application

디스크 접근이 생략되므로 응답 속도가 크게 향상됩니다.

Buffer Cache와 Page Cache의 차이

예전 Linux에서는 Buffer Cache와 Page Cache가 구분되어 있었습니다.

현재는 대부분 Page Cache로 통합되어 관리됩니다.

항목Buffer CachePage Cache
저장 대상블록 장치 메타데이터파일 데이터
현재 사용거의 없음적극 사용
목적블록 관리파일 캐싱

free 명령의 buff/cache 항목에는 이러한 캐시 영역이 함께 표시됩니다.

현재 Page Cache 확인

메모리 사용 현황은 다음 명령으로 확인합니다.

free -h

예시

              total   used   free  shared  buff/cache  available

Mem:           32G    10G     3G      1G        19G        20G

buff/cache가 바로 Page Cache를 포함한 캐시 영역입니다.

/proc/meminfo 확인

보다 자세한 정보는 다음 명령으로 확인할 수 있습니다.

cat /proc/meminfo

확인해야 하는 항목입니다.

Cached:

Buffers:

MemFree:

MemAvailable:

각 항목의 의미는 다음과 같습니다.

  • Cached : 파일 캐시 크기
  • Buffers : 버퍼 메모리
  • MemFree : 완전히 비어 있는 메모리
  • MemAvailable : 실제 사용 가능한 메모리

실무에서는 MemAvailable을 가장 중요하게 확인합니다.

Page Cache 삭제

테스트를 위해 캐시를 삭제할 수도 있습니다.

먼저 디스크에 데이터를 기록합니다.

sudo sync

그다음 캐시를 제거합니다.

echo 3 | sudo tee /proc/sys/vm/drop_caches

옵션 의미입니다.

의미
1Page Cache 삭제
2Dentry, Inode Cache 삭제
3모두 삭제

운영 서버에서는 특별한 이유가 없다면 자주 실행하지 않는 것이 좋습니다.

Page Cache는 자동으로 해제된다

많은 관리자가 캐시가 메모리를 낭비한다고 생각하지만 이는 오해입니다.

Linux는 애플리케이션이 메모리를 필요로 하면 Page Cache를 자동으로 회수합니다.

즉,

애플리케이션 실행

↓

메모리 부족

↓

Page Cache 자동 해제

↓

프로그램에 메모리 제공

따라서 Page Cache는 남는 메모리를 효율적으로 활용하는 기능입니다.

실무에서 자주 사용하는 명령어

메모리 확인

free -h

메모리 상세

cat /proc/meminfo

메모리 통계

vmstat

캐시 삭제

sudo sync

echo 3 | sudo tee /proc/sys/vm/drop_caches

프로세스 메모리

top

실시간 메모리 확인

watch -n 1 free -h

실무 사례

예를 들어 웹 서버에서 이미지 파일을 반복적으로 서비스한다고 가정해 보겠습니다.

처음 요청은 디스크에서 읽습니다.

사용자 요청

↓

Disk Read

↓

Page Cache 저장

두 번째 요청부터는 다음과 같이 동작합니다.

사용자 요청

↓

Page Cache

↓

즉시 응답

이 때문에 트래픽이 많은 웹 서버일수록 Page Cache의 효과가 매우 큽니다.

또한 데이터베이스 서버에서도 자주 사용하는 데이터 파일이 Page Cache에 유지되면 디스크 I/O를 크게 줄일 수 있습니다.

자주 묻는 질문

메모리가 거의 다 사용 중인데 문제가 있는 건가요?

아닙니다. Linux는 남는 메모리를 Page Cache로 적극 활용합니다. MemAvailable 값이 충분하다면 정상적인 상태입니다.

캐시를 자주 삭제하면 성능이 좋아지나요?

오히려 대부분의 경우 성능이 저하됩니다. 캐시를 삭제하면 다시 디스크에서 데이터를 읽어야 하므로 I/O가 증가합니다.

SSD에서도 Page Cache가 필요한가요?

필요합니다. SSD는 HDD보다 빠르지만 RAM보다 훨씬 느립니다. 따라서 SSD 환경에서도 Page Cache는 성능 향상에 중요한 역할을 합니다.

마무리

Page Cache는 Linux Kernel이 디스크 I/O를 줄이고 시스템 성능을 높이기 위해 제공하는 핵심 기능입니다. 한 번 읽은 파일을 메모리에 저장하여 반복적인 디스크 접근을 줄이고, 필요 시 자동으로 메모리를 회수하여 애플리케이션에 제공합니다. free, vmstat, /proc/meminfo를 활용해 Page Cache를 올바르게 이해하면 메모리 사용량을 정확히 해석하고 서버 성능을 효과적으로 분석할 수 있습니다.

댓글 남기기