리눅스 운영체제가 메모리를 먹는 사건 (free, buffers/cache)
리눅스 운영체제에서 top 명령어을 시용하여 운영 체제 메모리는 total, free, used로 나눈다. 만약 프로세스 메모리를 따져봐도 free가 너무 적고 used가 큰 경우가 존재한다. 이 때는 free 명령어를 이용하여 정말 메모리가 없는지 확인해야 한다.
32G 메모리 장비에서 top 명령어로 500M만 free이고 31.5G가 used로 나온다.
free로 확인하니 첫번 째 줄은 top처럼 출력하지만, buffers/cache에서는 free의 값이 17이다. (cached가 16임)
# free -g
total used free shared buffers cached
Mem: 31 30 0 0 0 16
-/+ buffers/cache: 14 17
Swap: 9 0 9
아래와 같이 buffers/cache 메모리를 정리하고 난 후 free로 메모리를 확인하면 다음과 같이 메모리 값이 변경된다.
전체 메모리가 0에서 17로 변경했다. (cached는 0으로 변경했다.)
# echo 1 > /proc/sys/vm/drop_caches
# free -g
total used free shared buffers cached
Mem: 31 13 17 0 0 0
-/+ buffers/cache: 13 17
Swap: 9 0 9
운영체제는 파일 IO가 발생할 때, 남는 메모리를 buffer나 cache에 메모리를 할당하여 속도를 빠르게 한다.
total memory = used + free
total memory = used + buffers + cache
메모리 DB나 메모리만 쓰는 일래스틱서치에서 파일 백업(snapshot)을 쓸 때 이런 현상이 발생할 수 있다.
착각하지 말자.