# 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 |