在 top 的输出中,有两个字段,在内存和交换使用行中标记为“buff/cache”和“avail Mem”:
这两个字段是什么意思?
我试过在谷歌上搜索它们,但结果只会在顶部显示通用文章,并且没有解释这些字段的含义。
Ste*_*itt 57
top
的联机帮助页没有描述字段,但是free
's做了:
缓冲区
内核缓冲区使用的内存(
Buffers
in/proc/meminfo
)缓存
页缓存和slab(
Cached
和SReclaimable
in/proc/meminfo
)使用的内存增益/缓存
缓冲区和缓存的总和
可用的
估计有多少内存可用于启动新应用程序,无需交换。与 cache 或 free 字段提供的数据不同,该字段考虑了页面缓存,并且并非所有可回收的内存块都会因正在使用的项目而被回收(
MemAvailable
in/proc/meminfo
,在内核 3.14 上可用,在内核 2.6.27+ 上模拟, 否则与免费相同)
基本上,“buff/cache”计算用于磁盘上或应该很快结束的数据的内存,因此可能是可用的(如果自读取后没有修改相应的内存,则可以立即使其可用) ,或给予足够的时间,如果有的话);“可用”衡量可以在不引起更多交换的情况下分配和使用的内存量(有关更多详细信息,请参阅如何跨发行版可移植地获得可用内存量?)。
小智 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)