通过 'neofetch' 和 'free -m' 输出的内存使用情况之间的差异

通过 'neofetch' 和 'free -m' 输出的内存使用情况之间的差异

我想编写一个脚本来定期检查我的 RAM 使用情况,然后计算其最大值。

要计算使用的内存,我有两个选择,通过neofetchfree -m

输出结果为$ free -m

              total        used        free      shared  buff/cache   available
Mem:          15839        4169        7630         794        4039       10555
Swap:          2047           0        2047

因此,我将输出通过管道传输为,$ free -m | grep Mem | awk '{print ($3/1024)}'结果是4.07324

现在,如果我执行类似于$neofetch输出的操作,$ neofetch | grep -i Memory | awk '{print ($2/1024)}'我会得到如下输出4.84668

因此,这两个输出不匹配,在检查实际 RAM 使用情况时应考虑哪一个?如果这很重要,我有一台运行 Nvidia 驱动程序的 4gb GTX1650,53MB通过以下方式检查时会消耗 RAM$ nvidia-smi


我能想到的一种可能的情况是,$ neofetch给出已用内存和共享内存,因为

$ free -m | grep Mem | awk '{print (($3+$5)/1024)}'

$ neofetch | grep -i Memory | awk '{print ($2/1024)}'

彼此非常接近(4.85547并且4.86035

但我的问题仍然存在,哪些记忆值值得信任?

答案1

我建议使用free -mcat /proc/meminfo作为内存使用量的来源。这些数字直接来自内核。

这里,使用的内存数量的计算方式如下:

# used = total - free - buffers/cache

Neofetch 从 计算内存使用情况cat /proc/meminfo,正如您所猜测的,它显示已使用的内存,包括“共享”部分:(源代码,第 2679 行):

# MemUsed = Memtotal + Shmem - MemFree - Buffers - Cached - SReclaimable

我认为来自的数字free是最可靠的。但由于内存使用情况可能很复杂,因此没有简单的答案。您必须询问 Neofetch 的开发人员为什么他们这样计算。

答案2

您应该只查看free输出的“可用”部分。Linux 系统上的大量 RAM 被各种工具(包括 neofetch)显示为“已使用”,因为它用于缓存,但只要任何程序需要它,它就会被释放(这显示在“buff/cache”中)。因此,虽然从技术上讲不是“空闲的”,但这些内存是可用的,并且是你真正想知道的:系统有多少可用内存。

因此,请将您的解析更改为:

free -m | awk '$1=="Mem:"{print $7}'

这将为您提供您真正想要的数字available。另一方面,Neofetch 似乎只报告“已使用”+“共享”,但这并未正确报告系统中新进程当前可用的内存量。

有用的参考资料:

相关内容