유성

Linux Page Cache와 Linux OS의 메모리 사용 전략 본문

DevOps

Linux Page Cache와 Linux OS의 메모리 사용 전략

백엔드 유성 2025. 12. 9. 19:52

Linux는 어떤식으로 Page Cache를 활용하는가?

Page Cache는 파일 기반 I/O를 통해 디스크에서 읽어온 거의 모든 파일 데이터를 캐싱한다.

단순히 사용자가 열어본것을 포함해서, 커널을 통해 파일이 오픈 된 경우도 Page Cache에 포함된다.

 

쉽게 말해서 MySQL 에서 select * from user where user_id = 1; 을 실행한 경우

MySQL은 내부 파일을 오픈해서 값을 찾고 이 과정에서 Linux 에서 Page Cache가 추가된다.

 

동작을 보면 훨신 쉽다.

1. 캐시가 없는 경우

MySQL -> read() 시스템 콜 -> Linux Kernel(디스크 읽기) -> Page Cache 적재 -> MySQL

 

2. 캐시가 있는 경우

MySQL -> read() 시스템 콜 -> Page Cache 읽기 -> MySQL

 

캐시가 있는 경우 디스크의 읽기 작업을 수행하지 않는다.

 

물론 이 과정과는 별개로, MySQL InnoDB는 자체적으로 Buffer Pool을 통해 논리적 페이지 캐시를 별도로 운용한다.

Page Cache는 어디까지나 OS 레벨의 물리 파일 캐시다.

 

이렇게 파일에 대한 접근이 없이 데이터 읽기가 가능한 구조를 띈다.

 

Linux의 buff/cache 적극적 활용

$ free -h
               total        used        free      shared  buff/cache   available
Mem:            15Gi       7.0Gi       1.2Gi        44Mi       7.5Gi       8.4Gi
Swap:          4.0Gi       1.0Mi       4.0Gi

 

현재 서버에서 사용중인 메모리는 7Gi 인데 불구하고, 남아있는 공간은 1.2Gi 이다.

buff/cache 가 상당히 많은 데이터를 들고 있는 것이고 이중 대부분은 Page Cache이다.

 

그리고 available은 왜 8.4Gi 가 되는지 물어보는 분들이 많이 있는데, 이 buff/cache는 임시 공간으로 만약

사용하려는 메모리가 높아져 free(비어있는) 메모리가 부족해지면, 커널은 buff/cache 영역의 페이지를 즉시 reclaim(회수) 하여 사용자 메모리로 재할당한다.

그렇기에 available에 buff/cache가 포함되었다고 보면 된다.

 

쉽게 표현하면 아래와 같다.

  • used : 이미 써서 다른 데 못 쓰는 지출된 현금
  • free : 지금 손에 들고 있는 완전한 현금
  • buff/cache : 언제든지 인출해서 쓸 수 있는 은행 예치금
  • available : 실제로 내가 지금 당장 쓸 수 있는 총 자산 (free + buff/cache)

 

이렇게 Linux는 캐시를 적극적으로 활용하는 이유는 속도 때문이다.