본문으로 건너뛰기

캐시메모리가 꽉차서 메모리 용량이 부족한 경우

· 약 2분

파일에 접근이 빈번한 시스템에서 메모리 용량을 확인시

# 메모리 용량 확인
$ free -m

캐시메모리의 점유율이 꽉찰 정도로 높게 나타나 메모리 용량이 부족한 걸 확인할 수 있다.

리눅스는 물리적인 저장/통신 장치와 데이터를 주고 받을 때 메모리에 먼저 적재한 후에 데이터를 주고 받는다. 이는 동일한 데이터에 대한 접근을 할 경우 메모리에서 바로 가져오도록 하여 I/O 성능을 높이기 위함이다.

해결

vfs_cache_pressure

시스템 설정 파일을 열어 디렉토리와 inode 오브젝트에 대한 캐시로 사용된 메모리를 반환하는 정도를 지정하는 vfs_cache_pressure 파라미터를 수정해준다.

$ vi /etc/sysctl.conf
# 기본값은 100
vm.vfs_cache_pressure = 10000

cache memory drop

캐시메모리를 주기적으로 비워주자

$ crontab -e
# 매일 새벽 4시에 캐시메모리 강제비우기
0 4 * * * sync && echo 3 > /proc/sys/vm/drop_caches

sync 명령어로 캐시메모리에 담긴 데이터를 실제 저장장치에 반영해주고, drop_caches를 실행한다. 커맨드로 실행시에 메모리를 반환하면서 서버가 잠시 멈출 수 있으니 새벽에 실행을 걸어놓자

  • echo 1 : page cache 해제
  • echo 2 : inode, dentry cache 해제
  • echo 3 : 모두 해제