计算当前用于从“/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”命令中“available”字段的含义了解详情),因此 和 之间的差异MemTotal衡量了有多少内存不可用。

您可能会考虑MemAvailable直接使用,并跟踪它有多接近 0,而不是跟踪您的值有多接近 16GiB — 这样您就不需要任何心理体操或了解安装的内存量。

man free详细解释了用于确定显示值的计算。

相关内容