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

Luc*_*uce 3 command-line bash ram

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

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

的输出给出$ free -m

              total        used        free      shared  buff/cache   available
Mem:          15839        4169        7630         794        4039       10555
Swap:          2047           0        2047
Run Code Online (Sandbox Code Playgroud)

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

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

因此,这 2 个输出不匹配,应该考虑哪一个来检查实际 RAM 使用情况?如果重要的话,我有一个 4GB GTX1650 运行 Nvidia 驱动程序,并且53MB在通过检查时消耗 RAM$ nvidia-smi


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

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

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

彼此非常接近 (4.855474.86035)

但我的问题仍然是,哪些内存值值得信任?

Art*_*ild 5

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

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

# used = total - free - buffers/cache
Run Code Online (Sandbox Code Playgroud)

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

# MemUsed = Memtotal + Shmem - MemFree - Buffers - Cached - SReclaimable
Run Code Online (Sandbox Code Playgroud)

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