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

use*_*000 63 linux memory top

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

在此处输入图片说明

这两个字段是什么意思?

我试过在谷歌上搜索它们,但结果只会在顶部显示通用文章,并且没有解释这些字段的含义。

Ste*_*itt 57

top的联机帮助页没有描述字段,但是free's做了:

缓冲区

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

缓存

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

增益/缓存

缓冲区和缓存的总和

可用的

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

基本上,“buff/cache”计算用于磁盘上或应该很快结束的数据的内存,因此可能是可用的(如果自读取后没有修改相应的内存,则可以立即使其可用) ,或给予足够的时间,如果有的话);“可用”衡量可以在不引起更多交换的情况下分配和使用的内存量(有关更多详细信息,请参阅如何跨发行版可移植地获得可用内存量?)。


小智 18

澄清一下,缓冲区是指正在写入的数据——在写入完成之前无法回收内存。

缓存是指已读取的数据——它会保留在需要再次读取的情况下,但可以立即回收,因为它始终可以从磁盘重新读取。


小智 8

此信息的规范来源是 /usr/src/linux/Documentation/filesystems/proc.txt

缓冲区:原始磁盘块的相对临时存储不应该变得非常大(20MB 左右) 缓存:从磁盘读取文件的内存缓存(页面缓存)。不包括 SwapCached。

您还可以在此处找到更多详细信息。

Linux 页面缓存(来自 meminfo 的“缓存:”)是大多数系统上最大的单个 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;
}
Run Code Online (Sandbox Code Playgroud)

金额cached

global_page_state(NR_FILE_PAGES) – total_swapcache_pages – i.bufferram
Run Code Online (Sandbox Code Playgroud)