본문 바로가기

OS/Linux

Linux - 메모리 정보 확인 명령어(free)

728x90

Linux free 명령어란?
리눅스 (CentOS, RHEL, Ubunto 등)에서 어떤 프로그램을 사용하냐에 따라 항상 메모리를 고려해야 합니다.

메모리를 많이 사용하는 프로그램도 많고, 캐시나 데이터베이스를 사용하는 경우 메모리 확인은 중요합니다. 

이때 free 명령어를 사용하면 쉽게 메모리 사용량과 여유량 캐싱으로 사용되는 메모리를 확인할 수 있습니다.

1. 리눅스 가용 메모리 확인하기
total : 전체 물리적인 메모리의 크기 / 설정된 스왑 전체 크기
used : 사용 중인 메모리 크기 / (total - free - buff/cache)
free : 사용 중이 아닌 메모리 크기 / 사용 가능한 메모리 크기 (total - used - buff/cache)
shared : 공유 메모리 크기 / tmpfs(메모리 파일 시스템), ramfs 등으로 사용되는 메모리
buff : 커널 버퍼로 사용 중인 메모리 크기

cache :  Page Cache와 slab으로 사용 중인 메모리
available : 실질적으로 사용 가능한 메모리, free 필드값의 메모리 부족시 해제되는 커널 내 메모리 영역 사이즈를 합친 값

2. free 옵션

[-h] : 사람이 읽기 쉬운 단위로 출력 (Gbyte 기준)
[-b | -k | -m | -g] : 바이트, 키로바이트, 메가바이트, 기가바이트 단위로 출력
[-c '반복 횟수'] : 지정된 반복 횟수만큼 free를 연속해서 실행 (1초 간격) // ex) # free -c 5 -> free 명령어 5번 실행

[-s '초'] : 지정된 초 간격으로 실행 // ex) # free -s 3 -> free 명령어 3초 간격으로 실행(Ctrl + C로 종료)

[-l] : 최고/최저 메모리 상황을 구분하여 출력

[-t] : 합계가 계산된 total 칼럼을 추가하여 출력


3. Buffer / Cache

캐싱이란 속도가 느린 디스크 입출력의 속도 향상을 위해 메모리 일부를 캐싱 영역으로 사용하여, 동일한 데이터 요청이 들어오면 디스크 입출력을 사용하지 않고 메모리단에서 처리하는 것입니다.
Buffer는 버퍼 캐시로 디바이스 블록에 대한 메타데이터들을 메모리에 캐싱한 크기입니다. 블록 디바이스로부터 데이터를 읽어오기 위해 필요한 정보들을 메모리에 저장해 둡니다.
Cache는 Page Cache와 slab이 사용 중인 메모리 크기입니다.

Page Cache는 한 번 디스크로 읽어온 데이터를 메모리에 저장해 두고 같은 데이터를 다시 읽을 때 디스크에 요청하지 않고 메모리에서 바로 읽어올 수 있게 합니다.

Buffer Cache는 Page Cache와 동일한 정의를 갖지만 Page Cache에는 파일의 데이터가 저장되지만 Buffer Cache에는 파일의 메타 정보(블록 정보)들이 저장됩니다.
Slab은 커널 내부적으로 사용하는 메모리 공간을 말합니다. Slab영역에는 inode cache와 dentry cache 등이 저장됩니다.

 

Cache와 Buffer 중 최근 사용되지 않은 메모리 크기에 대한 정보는 /proc/meminfo에서 볼 수 있습니다.

 

위에 보이는 Inactive(anon)와 Inactive(file), SRelaimable이 참조된 지 오래되어 Swap 영역으로 이동하고 그 영역을 새로운 메모리로 할당할 수 있는 크기입니다.
Inactive(anon) : 익명 메모리 중 참조가 적은 메모리 크기입니다.
Inactive(file) : Page Cache 중 참조가 적은 메모리 크기입니다.
SRelaimable : Slab 중 재할당 가능한 영역입니다.

 

4. 스왑(Swap)
스왑(Swap)은 디스크의 일정 부분을 메모리가 부족하면 메모리처럼 사용하기 위해 설정해 둔 공간입니다.
커널은 메모리가 부족하면 Buffer와 Cache에서 자주 사용 되지 않는 것들을 비우고 메모리 할당을 시도합니다.

메모리에 있는 데이터 중 최근 사용되지 않은 데이터를 Swap 공간으로 이동시키걸 Swap-out 이라 합니다.
Swap으로 옮겨진 데이터를 프로세스가 읽기 위해 메모리로 데이터를 다시 가져오는데 Swap-in 이라 합니다.

Swap-out -> Swap-in 이 진행되면 메모리 연산과 디스크 입출력이 발생하여 서버 성능 저하가 발생합니다.


일시적인 메모리 사용 증가로 일정 Swap을 사용하는 상황과 지속적인 메모리 부족으로 인해 Swap이 커지는 경우를 지속적으로 모니터링하여 메모리 증설을 고려해야 합니다.

 

추가) 캐시 메모리 비우는 방법

--> drop_caches의 기본값은 0 (=캐시 메모리를 drop 하지 않음)

 

ex) # echo 설정값 > /proc/sys/vm/drop_caches    // echo 명령어를 이용해 적용해 주면 됩니다.

0: 기본
1: Page Cache 해제
2: dentry, inode Cache 해제
3: Page, dentry, inode Cache 해제

728x90
반응형