본문 바로가기
서버 개발 (AWS, Linux, DevOps)/리눅스 (Ubuntu)

리눅스 : 메모리 확인 / 캐시 삭제

by 번데기 개발자 2021. 2. 21.
반응형

리눅스의 캐시와 메모리

리눅스에서 free 명령어를 사용하다 보면 buffer/cache라는 것이 존재합니다. 이 부분은 직접 사용하고 있는 메모리가 아닌 버퍼와 캐시에 사용된 메모리를 말합니다.

버퍼와 캐시에 저장된 메모리 말고 Swap 메모리도 있는데 해당 메모리는 메모리의 사용량이 늘어남에 따라서 디스크의 일부를 Ram처럼 사용할 수 있게 해주는 영영을 의미합니다.

(커널에서 실제 메모리에 올라와 있지 않는 블록중 쓰이지 않는 것을 디스크에 저장하여 사용 가능한 메모리 영역을 늘림)

 

여기서는 버퍼와, 캐시에 사용된 메모리를 해제하는 법에 대해 알아보겠습니다.

 

 

버퍼와 캐시에 사용된 메모리를 지워줘야 하는 이유

일반적으로 캐시는 느린 장치의 데이터를 빠른 장치에 임시로 보관해두고 사용하여 성능을 올리는 것이 목적입니다.

 

따라서 캐시는 당연히 사용하는 것이 좋지만, 적중률(hit이라고도함)이 낮은 캐시의 경우에는 캐시를 사용하는 것이 성능에 좋지 않을 수 있습니다.

 

메모리와 같은 빠른 장치는 공간이 한정되어 있기 때문에 모든 정보를 캐시할수 없기 때문에 캐시를 제거해야 합니다.

 

적중률이 낮은 캐시를 사용하면 오히려 성능에 안 좋은 영향을 줄 수 있어서 캐시를 잘 관리해야 합니다.

 

 

Linux에서의 캐시 관리

 

리눅스에서는 기본적으로 디스크 상의 파일을 읽고 난 뒤 (I/O입출력) 닫아도 메모리가 모두 반환되지 않습니다.

 

그 이유는 파일의 정보를 다음 사용해 대비하여 cache 하기 때문입니다.

 

따라서 대용량의 파일이 관리되는 서버는 캐시의 적중률이 낮게 되기 때문에 cache기능을 끄거나 주기적으로 캐시를 지워주어야 합니다.

 

이제 리눅스에서 메모리(버퍼,  캐시)를 비우는 방법에 대해서 알아보겠습니다.

 



캐시를 삭제하기 전 메모리 확인

free -m


리눅스에서 시스템 블록에 있는 캐시 삭제 (버퍼 캐시 삭제)

sudo echo 2 > sudo /proc/sys/vm/drop_caches


또는

sudo sysctl -w vm.drop_caches=2

 

를 이용하여 버퍼에 있는 캐시를 삭제할 수 있습니다.

 

 

페이지 캐시까지 모두 삭제

sudo echo 3 > sudo /proc/sys/vm/drop_caches


또는

sudo sudo sysctl -w vm.drop_caches=3

를 이용하여 페이지에 있는 캐시까지 모두 삭제할 수 있습니다.

 



주기적으로 시스템 블록에 있는 캐시 삭제 (cron 사용)

0 * * * * sync && sudo echo 3 > sudo /proc/sys/vm/drop_caches



위처럼 하면 시스템이 오래 동작하고 있어도 리눅스에 있는 메모리 점유가 크게 늘어나지 않습니다.

하지만 파일 입출력이 빈번하게 일어나는 시점에 위와 같이 시스템 캐시를 날리면 CPU 사용량이 과도하게 증가할 수 있습니다.

 

 

 

 

linux buffer/cache 비우기

 

linux buffer/cache 비우기

 

리눅스 swap 메모리

 

 

 

 

 

 

 

 

 

 

반응형