我想编写一个脚本,定期检查我的RAM使用情况,然后计算它的最大值。
为了计算使用的内存,我有两个选项,通过neofetch或free -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使用情况时应该考虑哪一个?如果有关系的话,我有一个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.85547和4.86035)
但我的问题仍然是,哪些记忆价值值得信任?
发布于 2022-09-12 08:24:17
我建议您使用free -m或cat /proc/meminfo作为内存使用的来源。这些数字直接来自内核。
在这里,所使用的内存数计算为:
# used = total - free - buffers/cacheNeofetch从cat /proc/meminfo计算内存使用量,正如您所猜测的,它显示了包括“共享”部分在内的已使用内存:(源代码,第2679行):
# MemUsed = Memtotal + Shmem - MemFree - Buffers - Cached - SReclaimable我相信来自free的数字是最可靠的。但是,由于内存的使用可能很复杂,所以没有一个简单的答案。您将不得不问Neofetch的开发人员,为什么他们会像他们那样计算它。
发布于 2022-09-12 10:20:05
您应该只查看free输出的“可用”部分。Linux系统上的许多RAM被各种工具(包括新取)显示为“使用”,因为它用于缓存,但只要任何程序需要它,就会释放它(如“buff/cache”中所示)。所以,虽然在技术上不是“自由的”,但内存是可用的,这就是你真正想知道的:系统有多少内存可用。
因此,将解析更改为:
free -m | awk '$1=="Mem:"{print $7}'这将给你在available下的数字,这是你真正想要的。另一方面,Neofetch似乎只是报告“已使用”+“共享”,但这并不能正确地报告系统上新进程当前可用的内存量。
有用的参考资料:
https://askubuntu.com/questions/1428827
复制相似问题