首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过“新获取”和“空闲-m”输出内存使用情况的差异

通过“新获取”和“空闲-m”输出内存使用情况的差异
EN

Ask Ubuntu用户
提问于 2022-09-11 20:28:34
回答 2查看 787关注 0票数 3

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

为了计算使用的内存,我有两个选项,通过neofetchfree -m

$ free -m的输出给出:

代码语言:javascript
复制
              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使用情况时应该考虑哪一个?如果有关系的话,我有一个4gb的GTX1650运行Nvidia驱动程序,并且在通过$ nvidia-smi检查时使用53MB内存。

我能想到的可能情况之一是,$ neofetch为我提供了使用过的内存和共享内存,因为

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

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

非常接近对方(4.855474.86035)

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

EN

回答 2

Ask Ubuntu用户

回答已采纳

发布于 2022-09-12 08:24:17

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

在这里,所使用的内存数计算为:

代码语言:javascript
复制
# used = total - free - buffers/cache

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

代码语言:javascript
复制
# MemUsed = Memtotal + Shmem - MemFree - Buffers - Cached - SReclaimable

我相信来自free的数字是最可靠的。但是,由于内存的使用可能很复杂,所以没有一个简单的答案。您将不得不问Neofetch的开发人员,为什么他们会像他们那样计算它。

票数 5
EN

Ask Ubuntu用户

发布于 2022-09-12 10:20:05

您应该只查看free输出的“可用”部分。Linux系统上的许多RAM被各种工具(包括新取)显示为“使用”,因为它用于缓存,但只要任何程序需要它,就会释放它(如“buff/cache”中所示)。所以,虽然在技术上不是“自由的”,但内存是可用的,这就是你真正想知道的:系统有多少内存可用。

因此,将解析更改为:

代码语言:javascript
复制
free -m | awk '$1=="Mem:"{print $7}'

这将给你在available下的数字,这是你真正想要的。另一方面,Neofetch似乎只是报告“已使用”+“共享”,但这并不能正确地报告系统上新进程当前可用的内存量。

有用的参考资料:

票数 4
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/1428827

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档