![free 输出中的 buffers 列是什么?](https://linux22.com/image/21722/free%20%E8%BE%93%E5%87%BA%E4%B8%AD%E7%9A%84%20buffers%20%E5%88%97%E6%98%AF%E4%BB%80%E4%B9%88%EF%BC%9F.png)
答案1
free
从提取其数据/proc/meminfo
slkwr133701:/usr/src/linux # free
total used free shared buffers cached
Mem: 2053456 434572 1618884 0 77888 201820
slkwr133701:/usr/src/linux # cat /proc/meminfo
MemTotal: 2053456 kB
MemFree: 1618736 kB
Buffers: 77928 kB
....
这是指用于临时块 I/O 存储的内存。内核必须不断分配和释放相同大小的单元,例如块 I/O 传输、网络数据包和套接字缓冲区
您可以通过运行更好地了解缓存和缓冲区分配slabtop
回答您的使用问题:系统通常会分配比其需要更多的块,但随着“内存压力”的增加,这些额外的块将被释放。
答案2
“缓冲区”在内存压力下是可回收的。所以它类似于页面缓存(“缓存”栏);没什么值得担心的。 “缓冲区”值可以小也可以大,这取决于您的系统正在做什么:-)。我们可以发现这里统计了几种类型的缓存。
缓冲区高速缓存实际上是块设备的页高速缓存。 Linux 只是单独报告这些。[*] 当程序读/写块设备节点时,您可能会注意到“缓冲区”的使用,例如dd status=progress if=/dev/sda of=/dev/null
。显然人们在运行 DVD 播放器程序时也会注意到这一点。
证明请参见:30% 的 RAM 是“缓冲区”。它是什么?
如果您尚未访问块设备节点,则您的“缓冲区”可能都是文件系统元数据。文件系统在内部使用缓冲区高速缓存是为了方便。他们确保它永远不会重复文件数据- 文件内容 - 存储在主页缓存中。文件系统使用缓冲区高速缓存的确切用途(如果有的话)因文件系统而异。
在物理 RAM 量较小的计算机上,当我使用 ext3/ext4 文件系统时,我注意到“缓冲区”看起来可能很高。这是因为对日志的写入会通过缓冲区高速缓存。 (参见上面的链接)。 ext3/4 文件系统还将目录内容存储在缓冲区高速缓存中。
其次,命令显示的“缓冲区”free
还包括SReclaimable,意思是可回收的slab。 (此处演示:再次监控 Linux 内存的正确方法)。
平板内存是不是页面/缓冲区缓存的一部分。然而,将它们一起计数很方便。它们都是可回收的,可回收平板的主要(唯一?)用途是用于文件系统缓存。例如,文件元数据(索引节点)和路径查找(目录项)缓存在可回收的板中。 ”在具有大量文件且大部分空闲的系统上,可回收的平板内存[可能]会占用大部分系统内存”。
您可以在 中看到原始值Buffers
和SReclaimable
值cat /proc/meminfo
。您还可以运行slabtop
查看板列表。 AFAICTslabtop
不提供有关平板是否可回收的统计信息。但你通常可以猜到,如果有一些可疑的板块,我想你可以通过名字来查找。
[*] 就本答案而言,“缓冲区缓存”是 in 计数的Buffers
缓存/proc/meminfo
。然而,其他来源可能将整个页面缓存称为统一缓冲区缓存。如果您想要历史解释,请参阅第一个链接。
此外,当 Linux 开发人员争论文件系统实现时,他们可能会使用“缓冲区缓存”来表示不同的含义。
答案3
其次,free命令显示的“缓冲区”还包括SReclaimable
根据 free 命令的手册页(版本 3.3.15):“cache 页面缓存和平板使用的内存(/proc/meminfo 中的 Cached 和 SReclaimable)”
因此,包含 SReclaimable 的是缓存,而不是缓冲区。