본문 바로가기
Linux

Linux - 메모리 PageCache/BufferCache/Shared 이해

by 올엠 2024. 2. 24.
반응형

메모리를 비우기 전에, 우선 먼저 메모리를 알아야 할 것 같다.

free 명령을 이용해서 현재 메모리 상황을 보면 다음과 같다.

메모리는 현재 1GB(985Mbyte )가 전체이고, 현재 사용중인 메모리는 170Mbyte이고 비어있는 공간은 230Mbyte 이다. 이외 buff/cache가 있는데 이는 실제로 사용이 가능한 공간이라고 봐도 무방하다. 그래서 뒤에 available이라는 문구로 사용이 가능하다고 표현하고 있다.

그렇다면 buff/cache는 어떤 공간일까. 이와 관련있는 부분으로는 Pagecache와 BufferCache에 대해서 알아보도록 하겠습니다.

PageCache/BufferCache

PageCache와 BufferCache는 같은것 같지만 조금 다른게 구분이 필요하다.

먼저 PageCache는 리눅스에서 파일 I/O 성능을 향상시키기 위해서 한번 읽은 파일의 내용을 PageCache 에 저장하게 된다. 그리도 다시 읽기를 요청하면 디스크에서 읽지 않고 PageCache를 통해 빠르게 접근이 가능하게 된다. 쉽게 테스트할 수 있는 방법으로는 cat 명령등을 통해 파일을 읽고 cache를 확인해볼 수 있다. 아래 그림은 cat 명령으로 특정 바이너리를 읽은후 변화량이다.

BufferCache는 파일의 자료 구조라고 하여, 파일 저장 위치를 의미하는 인덱스 정보가 여기에 포함된다. 그외에도 파일의 구조적인 정보등도 여기에 포함된다.

inode, dentry cache 라고도 불리는 영역이다.

이런 Cache 메모리를 비우고자 한다면, 아래 명령을 이용해서 정리가 가능하다.

먼저 PageCache 를 메모리에서 정리하는 옵션은 1을 이용한다.

echo 1 > /proc/sys/vm/drop_caches

BufferCache(inode, dentry cache)를 정리하는 옵션은 2를 이용한다.

echo 2 > /proc/sys/vm/drop_caches

PageCache, BufferCache 를 모두 정리하는 옵션은 3이다.

echo 3 > /proc/sys/vm/drop_caches

Shared

이외 shared 부분은 공유 메모리로 프로세스간 메모리를 공유하여 사용 할 수 있는 메모리이다. 이 공유 메모리는 직접 삭제하거나 시스템을 재시작해야만 초기화해된다는 점을 기억하자.

현재 사용중인 공유 메모리는 ipcs -a 명령을 통해 확인할 수 있고, 3가지 공유 메모리 타입이 있는 것을 알 수 있다.

삭제는 ipcrm 명령으로 가능하며, 공유 메모리 타입에 따라서 -q(Message Queues), -m(Shared Memory), -s(Semaphore) 를 통해 삭제가 가능하다.

반응형