free 输出中的 buffers 列是什么?

free 输出中的 buffers 列是什么?

这些 问题简单列出free命令的格式,注意buffers是必须写出到磁盘的内核内存,而cache是​​不需要写到磁盘的文件数据。

在我的系统上,与大多数自由运行的情况不同,缓冲区占用了超过 10% 的 RAM。通常,缓冲区是一个很小的、几乎是令牌的值。

我的问题是,缓冲区区域到底是什么?我可以用 查找吗lsof?它是否包含尚未刷新的打开文件区域?它是内存映射文件区域吗?它是什么?

系统运行良好,使用的交换空间很少,因此性能良好。

答案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 内存的正确方法)。

平板内存是不是页面/缓冲区缓存的一部分。然而,将它们一起计数很方便。它们都是可回收的,可回收平板的主要(唯一?)用途是用于文件系统缓存。例如,文件元数据(索引节点)和路径查找(目录项)缓存在可回收的板中。 ”在具有大量文件且大部分空闲的系统上,可回收的平板内存[可能]会占用大部分系统内存”。

您可以在 中看到原始值BuffersSReclaimablecat /proc/meminfo。您还可以运行slabtop查看板列表。 AFAICTslabtop不提供有关平板是否可回收的统计信息。但你通常可以猜到,如果有一些可疑的板块,我想你可以通过名字来查找。


[*] 就本答案而言,“缓冲区缓存”是 in 计数的Buffers缓存/proc/meminfo。然而,其他来源可能将整个页面缓存称为统一缓冲区缓存。如果您想要历史解释,请参阅第一个链接。

此外,当 Linux 开发人员争论文件系统实现时,他们可能会使用“缓冲区缓存”来表示不同的含义。

答案3

其次,free命令显示的“缓冲区”还包括SReclaimable

根据 free 命令的手册页(版本 3.3.15):“cache 页面缓存和平板使用的内存(/proc/meminfo 中的 Cached 和 SReclaimable)”

因此,包含 SReclaimable 的是缓存,而不是缓冲区。

相关内容