OS 버퍼 캐시를 메모리로 복구시키는 방법 문의
페이지 정보
작성자 LeeHyongDong 아이디로 검색 전체게시물 댓글 1건 조회 3,215회 좋아요 0회 작성일 20-08-24 14:43본문
서버를 유지하던중 메모리를 버퍼 캐시로 잡아 free메모리가 부족합니다.
버퍼캐시를 리붓없이 free메모리로 전환 하는 방법과 버퍼 캐시의 크기 제한하는 방법이 있을까요?
댓글목록
LeeHyongDong님의 댓글
LeeHyongDong 작성일
리눅스 커널은 기본적으로 메모리가 유휴 상태(free)로 있는 것을 선호하지 않습니다. 즉 할당되지 않은 메모리는 커널이 사용하고 가능한 캐시로 사용합니다.
캐시메모리는 2종류로 나뉘며 page cache와 inode, dentry cache로 구분 됩니다.
page cache : 물리적인 저장/통신 장치와 데이터를 주고받는데 나중에 동일한 데이터에 접근할 경우 메모리에서 바로 가져오도록 하여 I/O 성능을 높이는 캐시입니다.
inode, dentry cache : 파일의 자료구조로 보다 빠른 데이터 접근을 위한 cache며 dentry는 경로명 탐색을 위한 cache도 수행합니다.
free메모리가 부족한경우 명령어를 입력해 버퍼 캐시를 삭제할 수 있습니다.
sync를 하지않고 캐시를 삭제할경우 프로그램을 강제종료한것처럼 데이터가 유실될수 있습니다.
pagecache 비우기
sync
echo 1 > /proc/sys/vm/drop_caches
혹은
sync
sysctl -w vm.drop_caches=1
dentries, inodes 비우기
sync
echo 2 > /proc/sys/vm/drop_caches
혹은
sync
sysctl -w vm.drop_caches=2
pagecache, dentries, inodes 모두 비우기
sync
echo 3 > /proc/sys/vm/drop_caches
혹은
sysctl -w vm.drop_caches=3
vfs_cache_pressure를 이용해 캐시메모리를 반환하도록 할 수 있습니다.
sysctl -a | grep vm.vfs_cache_pressure 를 통해 현재 값을 확인할 수 있으며 100이 기본값입니다.
100이상의 값으로 설정하게되면 캐시메모리를 free메모리로 반환하게 할 수 있습니다.
sysctl -w vm.vfs_cache_pressure=1000
이후 영구 설정을 위해 /etc/sysctl.conf파일에 추가
echo “vm.vfs_cache_pressure=1000” >> /etc/sysctl.conf
감사합니다.