들어가기 전에,
메모리 사용률 계산 방법을 참고하려고 들어왔는데 free 실행 결과가 아래 사진과 다르다면?
즉, Mem/Swap 사이에 행 하나가 더 있거나 available 열이 없으면 오래된 OS를 사용하고 있을 수 있으니 아래의 링크를 참고한다.
2021.06.11 - [CentOS 6] 메모리 사용률 계산
OS 버전이 올라옴에 따라 free 명령에도 변화가 있었기 때문에, 아래 내용은 도움이 되지 않을 것이다.
각설하고,
free 명령으로 메모리 사용량을 확인하면 조금 이상한 점이 있다.
위 사진의 Mem 행에서 사용량(used)과 남은 메모리 용량(free)을 더해도 총 용량(total)에 한참 못 미친다는 것이다.
나머지는 대체 어디로 간 걸까?
바로 buff/cache에서 찾을 수 있다.
리눅스는 성능 향상을 위해 남은 메모리 용량을 캐시 영역으로 사용하기 때문이다. 할당되어 있던 캐시 영역은 프로세스가 메모리를 필요로 하는 경우, 자동으로 크기를 조절한다.
먼저 free 명령의 각 속성 의미를 정리해둔다.
total | 현재 시스템에 설치되어 있는 전체 메모리 용량 total = used + free + buff/cache total = used + available |
used | 현재 사용 중인 메모리 용량 used = total - free - buff/cache used = total - available |
free | 사용 가능한 잔여 메모리 용량 |
shared | 프로세스 간 통신에 사용되는 메모리 옹량 |
buff/cache | 캐시 영역으로 사용하는 메모리 용량 buff/cache = buffers + cache |
available | 기존의 -/+ buffer/cache이 삭제되고 생성된 속성. Swapping 없이 사용 가능한, 즉 실제로 사용 가능한 메모리의 예상 용량 |
이 정보를 바탕으로 메모리 사용률을 계산해본다.
실질 메모리 사용률
실질 메모리 사용량
캐시 영역을 제외한 메모리 사용량
공식
$$ \mathrm{real\_usage} = \frac{\mathrm{used}}{\mathrm{total}}*100(\%) $$
계산 명령어
free | grep ^Mem | awk '{printf "actual_usage=%s, total=%s, actual_usage_ratio=%.2f%% \n", $3, $2, $3*100/$2}'
명목 메모리 사용률
명목 메모리 사용량
실질 메모리 사용량과 캐시 영역을 포함한 메모리 사용량을 더한 양
공식
$$ \mathrm{usage} = \frac{\mathrm{used} + \mathrm{buff/cache}}{\mathrm{total}} * 100(\%) $$
계산 명령어
free | grep ^Mem | awk '{printf "nominal_usage=%s, total=%s, nominal_usage_ratio=%.2f%% \n", $3+$6, $2, ($3+$6)*100/$2}'