顶部的“ buff / cache”和“ avail mem”字段是什么意思?


28

在top的输出中,有两个字段,在内存和交换使用情况行中分别标记为“ buff / cache”和“ avail Mem”:

在此处输入图片说明

这两个字段是什么意思?

我已经尝试过使用Google搜索,但是结果只显示了通用文章,而没有解释这些字段的含义。

Answers:


31

top的联机帮助页没有描述这些字段,但free描述了:

缓冲区

内核缓冲区使用的内存(Buffersin /proc/meminfo

快取

页面缓存和slab(CachedSReclaimable/proc/meminfo)使用的内存

增益/缓存

缓冲区和缓存的总和

有空

估计有多少内存可用于启动新应用程序而无需交换。与cache或free字段提供的数据不同,此字段考虑了页面缓存,并且由于正在使用的项目,并非所有可回收的内存slab都将被回收(MemAvailablein /proc/meminfo,在3.14上可用,在2.6.27+内核上模拟) ,否则等同于免费)

基本上,“ buff / cache”对用于磁盘上数据或应很快在其中结束的数据使用的内存进行计数,因此有潜在的可用性(如果有缓存,则可以立即使相应的内存可用,或者有足够的时间,如果是缓冲区,无论如何,后者都应该保持较小);“ available”衡量在不引起更多交换的情况下可以分配和使用的内存量(有关更多详细信息,请参阅如何在各个发行版之间可移植地获取可用内存量?)。


1
如果有足够的时间,缓冲区/缓存将不可;它们是可以在任何程序需要分配一些内存时立即使用的内存段。另请参见linuxatemyram.com
DopeGhoti

4

只是为了澄清一点,缓冲区是指正在写入的数据-在写入完成之前不能回收内存。

缓存是指已读取的数据-保留在周围,以防万一需要再次读取,但由于始终可以从磁盘重新读取,因此可以立即对其进行回收。


这在这里并不是真的意思。 /proc/meminfoWriteback专门的领域。有一个单独的领域Buffers,而这正是显示为buffersfree -wBuffers此处显示内存使用的一个常见原因:“ RAM的30%是“缓冲区”。这是什么?
sourcejedi

从这一点(access.redhat.com/solutions/406773),我认为Writeback是尚未写入磁盘的那部分Buffer。还是您在说其他话?
WallStProg

该描述将产生误导。Buffers是(现在)页面缓存的一部分;它不算在内Cached,但算作是Active(file) + Inactive(file)。请参阅斯蒂芬·基特(Stephen Kitt)的答案评论。 Dirty是页面缓存中已写入的部分,因此最终需要写回磁盘。 Writeback不包括Dirty。因此,Writeback不是的值的一部分Buffers
sourcejedi

什么Buffers实际意味着,与块设备相关的页面缓存。某些文件系统在内部使用此功能。其他人根本不使用它。/来解决关于“我的RAM的30%是缓冲区”问题的答案。
sourcejedi

2

该信息的规范来源是 /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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.