클라우드 서버

[가상서버 ] Resource 모니터링 메모리 사용량

 Resource 모니터링에서 보여지는 메모리 사용량에 기준은 ?

콘솔페이지를 통해 확인해볼수 항목중 Resource 모니터링 Memory 사용량에 대한 안내입니다.

여기서 보여지는 차트는 인스턴스내 메모리 사용량을 체크하는 free 명령어등으로 보는 수치하고 동일합니다.

단, 시스템내 명령어로 보여지는 필드항목에 사용하는 메모리와 사용가능한 메모리양에 대한 이해가 필요로 합니다.

 

운영체제에서는 기본적인 프로그램, 가장 최근에 사용한 정보 혹은 빈번하게 사용하는 데이타들을 CPU를 거치지 않고 처리할수 있도록 Cache라는 메모리영역에 두고 대기하게 됩니다. 

Cache 영역에 보관중인 데이타를 다시한번 호출하게 될경우 CPU로 정보를 보내지 않고 메모리상에서 정보를 반환해주게 되는겁니다.

따라서 Cache는 데이터와 명령을 좀더 빠른 메모리 영역에 저장함으로 시스템 성능을 개선하는데 목적이 있습니다. 이러한 Cache를 Used Memory 로 보느냐....Free Memory 로 보느냐에 따라서 리소스 모니터링 수치가 달라지게 되는데 IWINV Resource 모니터링에서는 Cache 메모리도 사용하고 있는걸로 체크합니다. (대부분에 리소스 모니터링툴은 Cache 메모리를 사용하는걸로 판단합니다.)

 

free를 통해 출력되는 결과는 운영체제 버전에 따라 크게 2가지로 분류되며 Ubuntu 14.04 이하 / CentOS 6.X 이하버전에서는 free 에 대한 값을 buffers/cacahe 메모리를 포함했을때와 하지 않았을때 항목이 추가되서 출력됩니다.

 

Ubuntu 14.04 이하 / CentOS 6.X 이하 

 

Ubuntu 16.04 / CentOS 7.X

 

 

 

테스트를 위해 Cached Memory 사용하고 IWINV 콘솔 Resource 모니터링에서 보여주는 수치하고 비교한 값입니다.

Ubuntu 14.04 이하 / CentOS 6.X 이하 

 

해당버전에서는 used 메모리에는 이미 buffers 와 cached 메모리양이 합산되어있습니다.

Used (사용하고 있는 메모리) * 100 (%) / 2049884(전체메모리)

577792 * 100 / 2049884 = 28 (%) 

 

Ubuntu 16.04 / CentOS 7.X

 

 

해당버전예서 보여지는 used에는 buff/cache 값이 따로 나누어져있습니다. 그러기에 실제로 사용하고 있는 메모리양을 구하기 위해서는 used + buff/cache 값이 됩니다.

Used (사용하고 있는 메모리) + buff/cache * 100 (%) / 2049884(전체메모리)

(54424 + 603960) * 100 / 2049884 = 32 (%) 

 

 

실질적으로 Cache 메모리는 시스템에서 남아있는 메모리보다 더많은 메모리를 요구하는 호출이 올경우 축소할수 있는 유동적인 메모리입니다. 따라서 Used Memory 이지만.. Free Memory 이기도한 아이러니한 녀석이지요......

Cache를 좀더 세분화해서 관리하려면 다음처럼 주기적으로 초기화하던지 애초부터 Cache 필요정도를 수치화시킬수 있습니다.

 

 

 

Cached 메모리 초기화 하는 방법

To free pagecache: (페이지케쉬 클리어)
# echo 1 > /proc/sys/vm/drop_caches

To free dentries and inodes: (트리와 아이노드 클리어)
# echo 2 > /proc/sys/vm/drop_caches

To free pagecache, dentries and inodes: (1번과 2번 모두 클리어)
# echo 3 > /proc/sys/vm/drop_caches

※ IWINV 에서는 기본 이미지상에 시간단위로 캐시메모리를 초기화할수 있게 스크립트가 삽입되어있으며 필요없으신분들은 삭제하시고 운영하시면 됩니다.

 

 

 

Cached 메모리 사용정도를 지정하는 방법

vfs_cache_pressure 커널파라미터를 이용해서 디렉토리와 inode 오브젝트에 대한 캐시로 사용된 메모리를 반환하는 경향의 정도를 지정하는 항목으로 기본값은 100으로 되어있습니다.

해당값을 0으로 설정하게 되면 Linux 커널은 오브젝트에 대한 캐시를 반환하지 않게 되며 얼마지나지 않아 Out of Memory 메세지를 뿌리게 되므로 사용시 유의하셔야 합니다.

또한 100이상의 값을 주면 Linux 커널은 오브젝트에 대한 캐시를 자주 반환하려고 하며 이를 이용하면 inode와 dentry 캐시를 줄일수 있습니다.

즉, 숫자가 높으면 높을수록 메모리에서는 캐시를 보관하지 않습니다. 

해당방법은 시스템에 큰 변화를 줄수 있으므로 충분한 테스트후에 서비스에 적용하길 바랍니다.

1회성 
# echo 10000 > /proc/sys/vm/vfs_cache_pressure

or

커널 파라메터에 설정을 저장 

# vim /etc/sysctl.conf 
.....................
sysctl vm.vfs_cache_pressure=10000

# sysctp -p