答案1
top
的联机帮助页没有描述这些字段,但是free
的做:
缓冲器
内核缓冲区使用的内存 (
Buffers
in/proc/meminfo
)缓存
页缓存和平板使用的内存(
Cached
和SReclaimable
in/proc/meminfo
)增益/缓存
缓冲区和缓存的总和
可用的
估计有多少内存可用于启动新应用程序(无需交换)。与缓存或空闲字段提供的数据不同,该字段考虑了页面缓存,并且由于正在使用的项目,并非所有可回收的内存片都会被回收(
MemAvailable
在 中/proc/meminfo
,在内核 3.14 上可用,在内核 2.6.27+ 上模拟) ,否则与免费相同)
基本上,“buff/cache”计算用于磁盘上或应该很快结束的数据的内存,因此可能可用(如果自读取后尚未修改,则相应的内存可以立即可用) ,或者给予足够的时间(如果有的话); “可用”测量可以分配和使用而不引起更多交换的内存量(请参阅如何跨发行版获取可移植的可用内存量?有关更多详细信息)。
答案2
只是为了澄清一点,缓冲器指的是正在被书面-- 在写入完成之前,内存无法回收。
缓存指的是已经过的数据读-- 保留它以备需要再次读取时使用,但可以立即回收,因为它始终可以从磁盘中重新读取。
答案3
此信息的规范来源是 /usr/src/linux/Documentation/filesystems/proc.txt
缓冲器:原始磁盘块的相对临时存储不应变得非常大(20MB 左右) 缓存:从磁盘读取文件的内存缓存(页面缓存)。不包括 SwapCached。
您还可以找到更多详细信息这里。
Linux 页面缓存(“缓存:" 来自 meminfo )是大多数系统上 RAM 的最大单一消耗者。任何时候您从磁盘上的文件执行 read() 时,该数据都会被读入内存,并进入页缓存 (1.)。
缓冲区缓存 (”缓冲器:" in meminfo)与 dentry/inode 缓存密切相关。
或者分析源码这。
的数量buffers
是函数的返回值nr_blockdev_pages(void)
long nr_blockdev_pages(void)
{
struct block_device *bdev;
long ret = 0;
spin_lock(&bdev_lock);
list_for_each_entry(bdev, &all_bdevs, bd_list) {
ret += bdev->bd_inode->i_mapping->nrpages;
}
spin_unlock(&bdev_lock);
return ret;
}
大量的cached
:
global_page_state(NR_FILE_PAGES) – total_swapcache_pages – i.bufferram