본문 바로가기

여러가지/구축 & 설치

[명령어] free

# free

: 시스템의 메모리 사용 현황/정보 출력

 

# free -m

// -m: 메가바이트(MB) 단위 출력

 

 

Q. free vs available

 

ㄱ. free

: 어느 누구도 사용하고 있지 않은 메모리

 

ㄴ. available

: 애플리케이션에 실질적으로 할당 가능한 메모리

즉, 사용하고 있더라도 할당 가능한 메모리 포함

 

 

Q. 왜 이런 차이가 발생할까?

 

buff vs cache

 

ㄱ. buff

: 블록 디바이스가 가지고 있는 블록 자체의 캐시

 

ㄴ. cache

: I/O 성능 향상을 위해 사용하는 페이지 캐시

 

'I/O 성능 향상' 방법

: 한번 읽었던 파일은 페이지 캐시에 저장함으로써 블록 디바이스가 아닌 메모리에서 파일 내용 가져옴

 

즉, buff/cache가 높다면  I/O가 많이 일어나는 상황이므로 더 많은 메모리 할당할 것

 

(+) 엘라스틱 서치

(+) 디스크/메모리 차이

 

즉, buff/cache는 I/O 성능 향상 위해 존재함

따라서 애플리케이션이 메모리를 필요로 한다면 OOM을 발생시키기보다는

buff/cache 영역 해제하고 애플리케이션이 사용할 수 있는 영역으로 바꿈

 

available = free + buff/cache

 

 

메모리 부족 시, 진행 순서

buff/cache -> swap -> OOM

 

 

swap

: 메모리가 부족한 상황에서 사용되는 가상 메모리 공간으로 주로 블록 디바이스 일부 영역 사용

 

(1) 프로세스B - - > 커널 : 메모리 공간 요청

(2) 할당 가능 메모리 X

(3) 커널 - - > SWAP : 프로세스A의 0번 메모리 SWAP 영역으로 넘김

SWAP OUT: SWAP 영역으로 넘기는 것 

(4) 커널 - - > 프로세스B : 비워진 공간 메모리 할당

 

(1) 프로세스A - - > 커널 : 0번 메모리 요청, 즉, SWAP 영역으로 넘어간 메모리 요청

(2) 커널 - - > SWAP : B의 메모리 SWAP 영역으로 넘긴 뒤, 0번 메모리 가져옴

SWAP IN: SWAP 영역에서 메모리 영역으로 가져오는 것

단, SWAP IN 되어도 SWAP 영역에 일정 기간동안 존재

: SWAP CACHED

(3) 커널 - - > 프로세스A : 메모리 0번 넘김

 

swap 영역 사용 시, 성능 저하 발생

왜냐하면, SWAP IN/OUT도 I/O이므로

I/O 빈번하게 발생하기 때문

 

Q. 성능이 떨어지더라도 OOM Killer에 의해 죽는 걸 막을 것이냐?

vs

성능이 떨어질 바에는 의해 죽는게 나을 것이냐?

 

=> 최근 트렌드 SWAP 영역 비활성화

ex) EC2 SWAP 없음

 

왜냐하면, 컨테이너 환경으로 넘어갔기 때문

컨테이너는 빠르게 다시 띄울 수 있기 때문에 쿠버네티스 환경에서는 대부분 SWAP 영역 비활성화

 

단, 데이터베이스 죽으면 곤란하여 EC2 + SWAP으로 사용

왜냐하면, 데이터를 날리는 것보다 느려지는 것이 나음.

따라서, 모니터링 통해 확인 및 분석 후 해결방한 제시

 

(+) API 서버

 

즉, SWAP 영역은 상황, 어플리케이션 종류 등에 따라 결정

 

 

<정리> 

1) free 명령어 사용해서 시스템의 메모리 사용 현황/정보 출력

2) available은 실질적으로 프로세스에게 할당할 수 있는 메모리 양

3) buff/cache 높다면  I/O가 빈번하게 발생한다는 의미

4) swap 영역을 사용한다는 것은 메모리 부족하다는 의미

 

 

 

 

'여러가지 > 구축 & 설치' 카테고리의 다른 글

[명령어] top  (2) 2024.01.29
[명령어] df  (1) 2024.01.28
[명령어] dmesg  (0) 2024.01.23
[명령어] uptime  (2) 2024.01.22
[SSH] 공개키 인증  (0) 2023.12.15