Answers:
top
的联机帮助页没有描述这些字段,但free
的描述了:
缓冲区
内核缓冲区使用的内存(
Buffers
in/proc/meminfo
)快取
页面缓存和slab(
Cached
和SReclaimable
中/proc/meminfo
)使用的内存增益/缓存
缓冲区和缓存的总和
有空
估计有多少内存可用于启动新应用程序而无需交换。与cache或free字段提供的数据不同,此字段考虑了页面缓存,并且由于正在使用的项目,并非所有可回收的内存slab都将被回收(
MemAvailable
in/proc/meminfo
,在3.14上可用,在2.6.27+内核上模拟) ,否则等同于免费)
基本上,“ buff / cache”对用于磁盘上数据或应很快在其中结束的数据使用的内存进行计数,因此有潜在的可用性(如果有缓存,则可以立即使相应的内存可用,或者有足够的时间,如果是缓冲区,无论如何,后者都应该保持较小);“ available”衡量在不引起更多交换的情况下可以分配和使用的内存量(有关更多详细信息,请参阅如何在各个发行版之间可移植地获取可用内存量?)。
只是为了澄清一点,缓冲区是指正在写入的数据-在写入完成之前不能回收内存。
缓存是指已读取的数据-保留在周围,以防万一需要再次读取,但由于始终可以从磁盘重新读取,因此可以立即对其进行回收。
/proc/meminfo
有Writeback
专门的领域。有一个单独的领域Buffers
,而这正是显示为buffers
在free -w
。Buffers
此处显示内存使用的一个常见原因:“ RAM的30%是“缓冲区”。这是什么? ”
Buffers
是(现在)页面缓存的一部分;它不算在内Cached
,但算作是Active(file) + Inactive(file)
。请参阅斯蒂芬·基特(Stephen Kitt)的答案评论。 Dirty
是页面缓存中已写入的部分,因此最终需要写回磁盘。 Writeback
不包括Dirty
。因此,Writeback
不是的值的一部分Buffers
。
Buffers
实际意味着,与块设备相关的页面缓存。某些文件系统在内部使用此功能。其他人根本不使用它。/来解决关于“我的RAM的30%是缓冲区”问题的答案。
该信息的规范来源是 /usr/src/linux/Documentation/filesystems/proc.txt
缓冲区:原始磁盘块的相对临时存储不应太大(20MB左右) 高速缓存:用于从磁盘读取的文件的内存中高速缓存(页面高速缓存)。不包括SwapCached。
您还可以在此处找到更多详细信息。
Linux页面缓存(在meminfo中为“ Cached:”)是大多数系统上最大的RAM单一使用者。每当您从磁盘上的文件执行read()时,该数据都会被读入内存,并进入页面缓存(1.)。
缓冲区缓存(在meminfo中为“ Buffers:”)相对于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