使用Ubuntu 14.02并运行cat /proc/meminfo命令,我得到以下结果:
MemTotal: 1007796 kB
MemFree: 64248 kB
MemAvailable: 64876 kB
我想知道MemFree和MemAvailable之间的确切区别。此外,任何提示,我如何可以更有效地使用系统资源将不胜感激。我订购了一台新的笔记本电脑,但目前,我正在一台内存为1GB的机器上开发。
注意:在执行该命令时,我正在运行两个终端和eclipse,因此您可以看到多任务是多么坚韧。
先谢谢你了。
4条答案
按热度按时间9njqaruj1#
Rik货车Riel的comments when adding MemAvailable to /proc/meminfo:
/proc/meminfo:MemAvailable:提供估计的可用内存
许多负载平衡和工作负载放置程序都会检查/proc/meminfo来估计有多少可用内存。他们通常通过将“免费”和“缓存”相加来做到这一点,这在十年前是可以的,但在今天几乎肯定是错误的。
这是错误的,因为Cached包括不能作为页面缓存释放的内存,例如共享内存段,tmpfs和ramfs,并且它不包括可回收的slab内存,这可能会占用大多数空闲系统的大部分系统内存,其中有很多文件。
目前,在不将系统推入交换区的情况下,可用于新工作负载的内存量可以通过MemFree、Active(file)、Inactive(file)和SReclaimable以及/proc/zoneinfo中的“低”水印来估计。
然而,这在将来可能会改变,并且用户空间真的不应该期望知道内核内部来估计空闲内存的量。
在/proc/meminfo中提供这样的估计会更方便。如果将来事情发生变化,我们只需要改变一个地方。
14ifxucb2#
虽然我们读的是英语,但对用户来说定义不够清楚。MemAvailable是指软件还是用户空间?applications是什么意思除了交换,还包括hugepage?directmap怎么样?和kernelpage?
这又是一个类比问题,即“可命名的名字不是一个常量名字”。
回到现实,我们真正想知道的是如何计算或者至少哪个更大。
基于ARM的示例
基于英特尔的示例
可悲的是,在打开两个月付费服务器后,问题更加复杂,与CPU有关吗?
好,再回到英语。https://www.merriam-webster.com/dictionary/
因此,以表格作为记忆的例子。当我们去餐馆时,有时候有空桌,但没有空桌;还有空桌,但没有空桌。
b4lqfgs43#
空闲内存实际上是内核留下的,没有注册该内存块以供使用。
可用内存是指在内核中注册的,可以立即使用的内存块。
判决:我们应该将***可用内存***视为可用内存。额外的空间来运行更多的应用程序。
q9yhzks04#
使用MemAvailable比使用MemFree更好。在当前的实现中,如果有一个大的页面缓存,
MemAvailable
可能比MemFree
大得多。正如Rik货车Riel commented when adding MemAvailable to /proc/meminfo,内核最好估计有多少可用内存(它通过MemAvailable来估计),因为计算方法可能会随着内核实现的变化而变化。
在上面链接的提交中,MemAvailable计算为
如果
page cache/2
小于low water mark
,则这可能小于MemFree。但是我们必须记住,不同的内核可能有不同的实现,因为正如Rik货车Riel提醒我们的那样,每个内核都知道它有多少空闲空间。所以使用MemAvailable来查看一个新进程可以使用多少内存。
man proc
告诉我们:这是对TheBeast's answer的一个外行的解释。