Linux

[CentOS 6] 메모리 사용률 계산

비번변경 2021. 6. 11. 23:37

먼저 free 명령어 결과가 아래 사진과 다르다면 이 글이 아니라 2021.06.12 - [CentOS 7] 메모리 사용률 계산 을 보기를 추천한다. 이 글 내의 OS나 free 버전보다 최신 버전을 사용하고 있을 수 있다.

 

free -m
CentOS 6 이하에서의 free

 free 실행 결과를 이용해서 메모리 사용 비율을 계산하는데 이상한 점을 발견했다. 메모리를 크게 사용하는 프로세스가 없는데 메모리 사용률이 90%를 넘은 것이다.

이유를 몰라 원인을 찾던 중에 리눅스는 성능 향상을 위해 사용하지 않는 메모리 일부를 캐시 영역으로 할당해둔다는 것을 알았다. Mem 행의 used 값은 캐시 영역을 포함한 메모리 사용량을 나타낸 것이었다.

 

 Mem 행에서 각 속성이 의미하는 바를 정리하면 다음과 같다.

total  현재 시스템에 설치되어 있는 전체 메모리 용량
total = used + free
used 캐시 영역을 포함하여 사용 중인 메모리 용량
free  사용하지 않는 메모리 용량
shared  프로세스 간 통신에 사용되는 메모리 옹량
buffers buffer cache로 할당된 메모리 용량
cached page cache로 할당된 메모리 용량

 

 그러면 여기서 남은 메모리 양인 free 용량이 앞으로 사용할 수 있는 메모리 용량인가?

 그건 또 아니다.

 프로세스가 메모리를 필요로 하는 경우, 시스템이 캐시 영역으로 할당된 메모리 용량을 줄이기 때문이다.

 그래서 일반적으로 used 용량은 명목 메모리 사용량이라고 보고, 캐시 영역으로 할당된 용량을 제외한 나머지를 실제 메모리 사용량이라고 본다.

 

 그리고 실제 메모리 사용량과 사용 가능한 메모리 양은 -/+ buffers/cache 행의 used와 free에 표시되어 있다. (물론 Mem 행 값을 이용해 계산할 수도 있다.)

 즉, 아래 사진처럼 정리할 수 있다.

free 명령 출력 정리

 이 정보를 바탕으로 메모리 사용비율을 계산해본다.

 

명목 메모리 사용률

명목 메모리 사용량
실질 메모리 사용량과 캐시 영역을 포함한 메모리 사용량을 더한 양

 

공식

$$ \mbox{nominal_usage} = \frac{\mbox{used}}{\mbox{total}} * 100(\%) $$

계산 명령어

free | grep ^Mem | awk '{printf "nominal_usage=%s, total=%s, nominal_usage_ratio=%.2f%% \n", $3, $2, ($3)*100/$2}'

 

 

실질 메모리 사용률

실질 메모리 사용량
캐시 영역을 제외한 메모리 사용량

 

공식

  •  Mem 행을 이용해 계산

$$ \mbox{actual_usage} = \frac{\mbox{used - buffers - cached}}{\mbox{total}} * 100(\%) $$

  •  -/+ buffers/cache 행을 이용해 계산

$$ \mbox{actual_usage} = \frac{\mbox{used}}{\mbox{used+free}} * 100(\%) $$

계산 명령어

# Mem 행을 이용해 계산
free | grep ^Mem | awk '{printf "actual_usage=%s, total=%s, actual_usage_ratio=%.2f%% \n", $3-$6-$7, $2, ($3-$6-$7)*100/$2}'

# -/+ buffers/cache 행을 이용해 계산
free | grep ^-/+ | awk '{printf "actual_usage=%s, total=%s, actual_usage_ratio=%.2f%% \n", $3, $3+$4, $3*100/($3+$4)}'