본문 바로가기
[개발] Infrastructure/Linux

Ubuntu 메모리 사용량 줄이기 - 캐시 메모리 클리어

by Devsong26 2021. 5. 30.

안녕하세요!

초보 개발자 슈브로포입니다.

 

저는 서버 OS로 Ubuntu 18.04LTS를 주로 사용합니다. 익숙해서 그런지 Centos는 어색하더라고요 :)

AWS에서 Ubuntu AMI를 선택하여 EC2를 생성하여 사용하다 보면 참 편리하고 좋습니다!

 

하지만 EC2를 사용하면 매달 청구되는 비용을 보면서 속이 쓰릴 때가 많습니다.

"인스턴스 유형을 한 단계만 내려도 비용이 반으로 줄겠는데..." 하고 말이죠.

 

제가 인스턴스 유형을 선택하는 기준은 Mem입니다.

제가 만들어 실행하는 파이썬, 자바 애플리케이션이 CPU보다는 Mem을 더 필요로 하기 때문이죠.

Ubuntu에 ssh로 접속 후 메모리 사용량을 확인할 때는 "top" 커맨드를 많이 사용합니다.

그러면 아래와 같은 화면이 보여집니다.

top - 12:14:22 up 24 min,  1 user,  load average: 0.08, 0.15, 0.11
Tasks: 159 total,   1 running, 116 sleeping,   0 stopped,   0 zombie
%Cpu(s):  2.2 us,  0.3 sy,  0.0 ni, 97.4 id,  0.0 wa,  0.0 hi,  0.2 si,  0.0 st
KiB Mem :  2002792 total,  1029376 free,   552388 used,   421028 buff/cache
KiB Swap:        0 total,        0 free,        0 used.  1286224 avail Mem 

KiB Mem이 표시되는 줄을 보시면 total, free, used, buff/cache 영역이 있습니다. (해당 인스턴스 유형은 t3a.small입니다.) 

 

각 영역을 간단하게 설명하면 아래와 같습니다.

- total: 해당 인스턴스가 사용할 수 있는 메모리의 총량

- free: 사용 가능한 메모리

- used: 사용 중인 메모리

- buff/cache: 버퍼, 캐쉬된 메모리

 

사용량을 줄이기 위해서는 buff/cache에서 사용 중인 메모리를 클리어 하는 방법 밖에는 없어 보였습니다.

스택익스체인지를 찾아보던 중 buffer와 cache에 대한 설명이 있어 인용을 하면 아래와 같습니다.

buffers
- Memory used by kernel buffers (Buffers in /proc/meminfo)
cache
- Memory used by the page cache and slabs (Cached and SReclaimable in /proc/meminfo)
buff/cache
- Sum of buffers and cache

 

자 그러면 어떻게 buff/cache 클리어 할까요?

저는 아래와 같은 스크립트가 작성된 .sh파일을 크론탭에 5분마다 수행되도록 설정하여 buff/cache 메모리를 클리어합니다.

#!/bin/bash

# Note, we are using "echo 3", but it is not recommended in production instead use "echo 1"
echo "echo 1 > /proc/sys/vm/drop_caches"
sudo sh -c "echo 1 > /proc/sys/vm/drop_caches"

물론 buff/cache의 사용량이 0이 되는 것은 아니며, 미 사용되거나 오래된 메모리를 클리어 하는 것으로 보입니다.

이렇게 불필요한 메모리가 누적되는 것을 방지하여 인스턴스 유형을 내릴 수 있었습니다.

 

 

이상으로 부족한 포스팅을 마치겠습니다.

조금이나마 도움이 되었다면 좋아요 눌러주시면 감사하겠습니다.

 

 

참고 URL

https://unix.stackexchange.com/questions/390518/what-do-the-buff-cache-and-avail-mem-fields-in-top-mean

https://aws.amazon.com/ko/ec2/pricing/on-demand/