"/proc/meminfo"의 "MemTotal"에서 "MemAvailable"을 빼는 데 현재 사용되는 총 메모리를 계산하는 올바른 방법은 무엇입니까?

"/proc/meminfo"의 "MemTotal"에서 "MemAvailable"을 빼는 데 현재 사용되는 총 메모리를 계산하는 올바른 방법은 무엇입니까?

나는 주어진 시간에 시스템이 얼마나 많은 메모리를 사용하고 있는지 가능한 한 정확하게 계산하려고 노력하고 있습니다. MemTotal에서 MemAvailable을 빼고 그 차이를 1024로 나누어 kB에서 MiB로 변환하면 현재 사용 중인 RAM의 총량을 얻을 수 있을 것 같습니다. 스크립트를 실행할 때 /proc/meminfo의 다음 출력에 따르면 출력은 입니다 1905.27 MiB. 그러나 free -m 및 top은 모두 메모리가 1154 MiB. 출력이 다른 이유는 무엇입니까? 내 방법이 사용 중인 총 메모리를 계산하는 올바른 방법이 아닌가요?

/proc/meminfo의 출력:

MemTotal:       16093472 kB
MemFree:        11284772 kB
MemAvailable:   14142472 kB
Buffers:          256672 kB
Cached:          3217852 kB
SwapCached:            0 kB
Active:          1721676 kB
Inactive:        2375840 kB
Active(anon):       3928 kB
Inactive(anon):  1057160 kB

출력 free -m:

               total        used        free      shared  buff/cache   available
Mem:           15716        1154       11014         428        3547       13803
Swap:           2047           0        2047

스크립트 조각:

mem_avail() {
    awk 'FNR == 3 {printf "%lu", $2}' "/proc/meminfo"
}

mem_total() {
    awk 'FNR == 1 {printf "%lu", $2}' "/proc/meminfo"
}

mem_used() {
    echo "|  $((($(mem_total)-$(mem_avail))/1024)) MiB"
}

내 출력은 /proc/meminfo의 값을 기반으로 합니다.1905.27 MiB

답변1

귀하가 명시한 목적을 고려하여:

사용된 메모리란 현재 다른 곳에 할당되어 있기 때문에 더 이상 사용할 수 없는 메모리를 의미합니다. 따라서 내 컴퓨터에 16GB 또는 RAM이 있고 이 스크립트의 아이디어는 현재 상태 표시줄에 사용 중인 메모리 양을 시각적 알림으로 표시하고 총 16GB에 가까워지고 있음을 경고하는 것입니다.

나는 당신의 계산이 당신의 의도와 일치한다고 생각합니다. MemAvailable짧은 시간 내에 얼마나 많은 메모리를 제공할 수 있는지 측정합니다."free -m" 명령에서 "사용 가능" 필드의 의미자세히 알아보기) 따라서 및 의 차이는 MemTotal사용할 수 없는 메모리 양을 측정한 것입니다.

MemAvailable값이 16GiB에 얼마나 가까운지 추적하는 대신 직접 사용하고 0에 얼마나 가까운지 추적하는 것을 고려할 수 있습니다 . 이렇게 하면 설치된 메모리 양에 대한 정신적 체조나 지식이 필요하지 않습니다.

man free표시된 값을 결정하는 데 사용되는 계산이 자세히 설명되어 있습니다.

관련 정보