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

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

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

在此输入图像描述

这两个字段是什么意思?

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

答案1

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

缓冲器

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

缓存

页缓存和平板使用的内存(CachedSReclaimablein /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

相关内容