리눅스 버퍼 캐시된 메모리 삭제하는 방법

리눅스를 이용해 서버를 운영하다 보면 버퍼/캐시가 쌓여 메모리를 점유하는 것을 top 또는 free -m 명령어로 확인할 수 있는데요.

버퍼와 캐시 메모리는 자주 사용하는 파일 내용이나 파일 위치등을 저장하기 때문에 캐시로 저장되어 있으면 디스크의 I/O를 줄여서 퍼포먼스를 빠르게 유지할 수 있는 장점이 있지만 장착된 램의 용량이 부족한 경우 스왑을 사용할 수도 있기 때문에 간헐적으로 메모리를 많이 사용하는 타이밍에는 성능 저하로 연결되게 됩니다.

이럴때 주기적으로 캐시 메모리를 비워 서버를 관리할 수 있습니다.

튜토리얼 환경 : 우분투 16.04 서버

캐시 메모리 비우기

캐시 메모리를 비우기 위해서 /proc/sys/vm/drop_caches 를 사용합니다. 경로 때문에 파일 처럼 보이지만 바이너리 명령어로 다음과 같이 사용할 수 있습니다.

sync

echo 1 > /proc/sys/vm/drop_caches

echo 2 > /proc/sys/vm/drop_caches

echo 3 > /proc/sys/vm/drop_caches

메모리를 비우기 전 sync 명령어로 메모리에 올라간 데이터를 디스크로 옮겨줍니다. 이 과정을 거치지 않으면 흡사 프로그램을 강제 종료한 것 처럼 데이터가 유실될 수도 있습니다.

/proc/sys/vm/drop_caches 명령어는 위 처럼 3단계로 사용할 수 있는데 1은 Page Cache 비우기, 2는 dentries, inodes 비우기, 3은 모두 비우는 명령어 입니다.

페이지 캐시는 파일의 내용을 메모리에 올리는 구조이고 dentries는 데이터의 위치(directory Entry) , inodes는 파일과 디렉토리의 정보를 담고 있는 자료 구조를 담당합니다.

자동으로 캐시 메모리 비우기

위 명령어로 관리자가 수동으로 캐시 메모리를 비울 수 있지만 만일 주기적으로 캐시를 삭제하고 싶은 경우에는 크론탭(crontab)에 명령어를 등록할 수 있습니다.

0 7 * * 0 sync && echo 3 > /proc/sys/vm/drop_caches # 매일 오전 7시에 캐시 비우기
0 * * * * sync && echo 3 > /proc/sys/vm/drop_caches # 매 시간 캐시 비우기

crontab -e 명령어로 크론탭을 실행한 다음 맨 마지막 줄에 위 명령어 둘 중 하나를 추가한 다음 저장합니다.

같은 주제의 글

댓글

이메일 주소는 공개되지 않으며 댓글에 하나 이상의 URL이 포함될 경우 관리자 승인 후 공개됩니다.

댓글은 운영 정책에 따라 관리됩니다. (링크)