나는 주어진 시간에 시스템이 얼마나 많은 메모리를 사용하고 있는지 가능한 한 정확하게 계산하려고 노력하고 있습니다. 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
표시된 값을 결정하는 데 사용되는 계산이 자세히 설명되어 있습니다.